【问题标题】:User permissions in PostgresPostgres 中的用户权限
【发布时间】:2019-01-21 06:41:31
【问题描述】:

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

规则的示例可能是:

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

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

  • 我会告诉 Postgres 哪个用户正在使用本地配置工作。
  • 然后我只是简单地运行该操作,同时期待失败的可能性。

假设我能够评估 Postgres DB 中的所有权限,我看到了一些积极的方面:

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

我的问题是:

  • 这会成为扩展时的瓶颈吗? (它是一个非常传统的基于 Web 的 PHP 应用程序,所以我预计选择比更新多 100 倍。但这会改变 Web 服务器的评估,因为它比 DB 服务器更容易复制。)
  • 是否有一些更好的知名设计实践来实现我想到的这种权限。

【问题讨论】:

    标签: php postgresql permissions access-control


    【解决方案1】:

    扩展后,您的数据库可能会充满难以编辑或更改某些内容的触发器。例如。如果添加额外的列,则应编辑与表相关的所有过程。

    如果我有你的问题,你是在试图控制网络应用程序用户。

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

    【讨论】:

    • 如果我们只讨论基于用户角色编辑列的能力,那么您是绝对正确的,我同意您的看法,但是当我尝试为 1 个实体介绍这一点时,您可以编辑一切,对于相同类型的其他实体,您只能更改列的子集(可能仅更改为值的子集),这对我来说不是那么清楚。
    猜你喜欢
    • 1970-01-01
    • 2017-11-26
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2020-01-16
    相关资源
    最近更新 更多