Postgres中的用户权限

时间:2018-08-14 11:57:39

标签: php postgresql permissions access-control

我需要在我的应用程序中实现访问控制。我需要控制谁可以编辑哪一行的哪一列。

规则的示例可能是:

  • 用户只能编辑自己的TableA行(也只能为她插入rown),该行通过TableB链接到她(TableB包含User和TableA的外键)。
  • 用户只能编辑其个人资料的某些部分,而管理员可以更新其他部分。

我不是在要求数据库为我的应用程序提供评估应用程序代码更改可能性所需的所有信息,而是在考虑基于触发器的插入,更新和删除方法。在这种情况下,触发器将被挂接到受控表上。触发器在不允许进行操作时会失败。

  • 我将使用本地配置告诉Postgres现在哪个用户在工作。
  • 然后我只是在期望失败的可能的情况下运行该操作。

假设我能够评估Postgres DB中的所有权限,那么我会看到一些积极的看法:

  • 我不需要在操作之前询问数据库。
  • 我不会在应用程序中添加权限评估。
  • 即使不使用适当的模型,我也可以从应用程序的不同部分运行更新,同时保持安全性。

我的问题是:

  • 扩大规模时这会成为瓶颈吗? (这是一个非常传统的基于Web的PHP应用程序,因此我希望选择的内容比更新的多100倍。但这将使评估从Web服务器转移到Web服务器上,而该服务器可能比DB服务器更容易复制。)
  • 是否有一些更好的知名设计实践来实现我所想到的这种权限。

1 个答案:

答案 0 :(得分:0)

有可能在扩展数据库之后将充满触发器,这些触发器将很难编辑或更改。例如。如果添加额外的列,则应编辑与表相关的所有过程。

如果我有您的问题,则您正在尝试控制Web应用程序用户。

我认为更好的方法是在PHP方面实施限制。例如创建角色,其中包含可能编辑列的数组。如果这是“管理员”,则他/她的列表将包含所有列。 然后根据角色配置动态创建表单,以使用户看到他/她可以编辑的内容。