【问题标题】:User based data access基于用户的数据访问
【发布时间】:2013-12-13 09:58:47
【问题描述】:

我正在努力寻找实现基于用户的数据访问的最佳方式。例如,假设我们有一家公司,有一位 CEO 和不同的部门负责人。一个数据库包含每个部门的财务,CEO可以查看所有部门的财务,而每个部门的负责人只能查看与他/她的部门相关的数据。

我使用的数据库是 PostgreSQL,它还没有实现行级访问规则。

我想知道是否有一个已知的范例可以用来实现这一点。我查看了 RBAC,但这对于我的需求来说似乎太复杂了。

有什么建议/意见吗?

艾莉

【问题讨论】:

  • 可能更适合 dba.SE。

标签: sql database postgresql authentication


【解决方案1】:

Imo,访问控制在应用程序级别实现起来要方便得多。

尽管具有所有优点,但数据库级(即使是行级)访问控制不会让您轻松管理棘手的用例,例如:“允许经理的秘书伪装成这部分任务的经理,同时他下个月请假一周。”坚持使用它来防止应用的数据库用户破坏数据。

在应用程序级别,更深入地研究 RBAC 和 ACL。周围有一些很好的实现,包括模式。例如:

http://symfony.com/doc/current/cookbook/security/acl.html

无论您选择哪种方法,我认为关键在于拥有它,以便您可以使用观察者模式的一些变体(事件、过滤器、插件挂钩,无论在您最喜欢的框架中调用什么)将应用程序逻辑插入其中。这将允许您使用回调而不是庞大的模式来管理更棘手的情况。

一些(丰富多彩且有争议的)演讲者更进一步:http://vimeo.com/2723800

【讨论】:

    【解决方案2】:

    这是一个复杂的话题。我不会不加批判地支持 Denis 关于基于应用程序的访问控制的建议,因为虽然它通常是放置它的正确位置,但并非总是如此。一旦你使用基于应用程序的解决方案,你就会被所有通过应用程序的请求所困。问题是这是否是您想要做出的权衡,或者您是否希望在处理其他事情时保留规则。

    PostgreSQL 没有简单的基于行的访问控制,但如果您需要,有足够的工具可以使某些东西工作。这并不简单,但它具有应用程序中立的优势。一个完整的解决方案超出了任何一篇文章的范围,但以下是我想到的潜在部分:

    1. 安全屏障视图(您可以使用触发器来管理更新)
    2. pg_has_role()

    现在,这与 Denis 上面的回答的共同点是,您不仅要在表上实现它,还要在数据处理层中实现它。问题是该层放置在数据库连接的哪一侧,仅此而已。那里的需求取决于您要在哪里强制执行所有访问的问题。

    【讨论】:

      猜你喜欢
      • 2016-04-29
      • 2018-05-18
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 2018-01-01
      • 2020-07-06
      • 1970-01-01
      • 2022-09-27
      相关资源
      最近更新 更多