postgres中的角色,组和设置会话授权

时间:2016-02-12 02:43:00

标签: postgresql row-level-security

我正在为多租户应用程序提供postgres行级安全性。我想通过一个策略实现这一点,该策略根据tenant_name分隔行,tenant_name是我的表中的一列。我有每个租户的角色。但是,我通过超级用户连接维护连接池。这样我只能有一个连接池。一旦我从租户那里得到一个查询,我想首先删除该租户的权限,然后执行查询。

所以我以超级用户身份连接到数据库,然后我“设置会话授权tenant_role”。这将设置session_user和current_user变量。但是,问题是该租户用户可以自己执行“设置会话授权some_other_tenant”,然后行安全性无关紧要。我猜这是因为DB登录上下文是超级用户。

那我怎么做到这一点?一旦我为某个用户“设置会话授权”或“设置角色”,该用户就不应该再次运行相同的事情。

由于

1 个答案:

答案 0 :(得分:0)

您可能需要阅读this,以获得答案。

基本上,创建一个无权限用户并通过它登录池(而不是作为管理员角色的连接池)。登录后,将角色升级为实际连接的用户。上面的URL告诉您如何执行此操作。

我无法理解的是,如果这是一个不受控制的环境,那么即使使用此解决方案,用户也可以升级到其他人的角色并仍然会造成严重破坏。因此,即使这回答了问题,但它可能仍然不是你想要最终做的事情!