我正忙于为多租户应用程序提供postgres行级别的安全性。我想通过一个策略来实现这一点,该策略基于tenant_name(它是我的表中的一列)分隔行。我有每个租户的角色。但是,我通过超级用户连接来维护连接池。这样我可以只有一个连接池。一旦我有租户的查询,我想先删除特权给该租户,然后执行查询。postgres中的角色,组和会话授权
因此,我以超级用户的身份连接到数据库,然后“设置会话授权tenant_role”。这设置了session_user和current_user变量。但是,问题是这个租户用户可以自己做一个“设置会话授权some_other_tenant”,然后行安全无关紧要。我猜这是因为数据库登录上下文是超级用户。
那么我该如何实现呢?一旦我为某些用户“设置会话授权”或“设置角色”,该用户就不应该再次运行相同的事情。
感谢
Thanks @Robins,这有帮助。事实上你最后提到的是事实。但是,“无法控制的环境”究竟意味着什么?如何把控制? –
既然你提到这个'这个租户用户可以自己做一个“设置会话授权some_other_tenant”',我假设这不是一个完全受控的环境,所以必须是最大的偏执狂。 –
“受控环境”是您可以确保0%的用户将这种类型的用户升级0%的时间。既然你不能确定...那么这是一个不受控制的环境(我总是想象Netflix的混沌猴子对我的数据库造成严重破坏:)(http://techblog.netflix.com/2012/07/chaos-monkey-released -into-wild.html):) –