3

我正在为多租户应用程序处理 postgres 行级安全性。我想通过一个策略来实现这一点,该策略基于我表中的一列租户名称来分隔行。我有每个租户的角色。但是,我通过超级用户的连接来维护一个连接池。这样我就可以只有一个连接池。一旦我有来自租户的查询,我想先删除该租户的权限,然后执行查询。

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

那么我该如何实现呢?一旦我对某个用户执行“设置会话授权”或“设置角色”,该用户将无法再次运行相同的操作。

谢谢

4

1 回答 1

0

您可能想阅读这篇文章,以获得您的答案。

本质上,创建一个无特权用户并通过该用户登录池(而不是连接池作为主管角色)。登录后,将角色升级为实际连接的用户。上面的 URL 告诉你如何做到这一点。

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

于 2016-02-12T04:15:58.330 回答