【问题标题】:ACL / Role Management: Managing users with multiple roles & Conflicting PermisisonsACL / 角色管理:管理具有多个角色和冲突权限的用户
【发布时间】:2012-01-02 08:33:20
【问题描述】:

一个逻辑卡点。我正在构建一个简单的 ACL,但我很困惑。我只是想以正确的方式做到这一点。

以一个简单的基于模型的 ACL 为例。

管理用户表tbl_user

id | userid |
-------------
1  | nabin  |
2  | suman  |

另一个用于管理群组的表格tbl_group

id | groupname |
-----------------
1  | admin     |
2  | member    |
3  | editor    |
4  | moderator |

另一个用于维护组和用户的表。 tbl_roles

id | userid | groupid
-----------------------
1  | 1      | 1
2  | 1      | 2
3  | 2      | 2
4  | 2      | 3
5  | 2      | 4

现在是一个用于管理访问 tbl_acl 的表

id | groupid | appresourceid
----------------------------
1  | 3       | 1

在这张表上,我将存储拒绝列表,因为拒绝列表肯定会比访问列表短。

现在,根据示例groupid:3 (editor),已拒绝资源1(假设这是管理区域)。

但是,如果你选择userid: 2(suman),那么他就是editormoderator。根据tbl_acl的规则,editor应该被拒绝,moderator应该被允许。

应该允许他访问资源还是应该拒绝? 允许 FIRST或拒绝 FIRST。应该优先考虑哪个?

一些调查方法

  1. 虽然用户作为编辑被拒绝,但他作为版主被允许访问该区域。
  2. 尽管版主可以访问资源,但所有编辑都受到限制。
  3. 不要忘记用户也是member。因此,如果我们将允许优先于拒绝。会员可以作为版主访问。除非,会员也被屏蔽

附言 我很清楚这个话题值得商榷。因此,事实会比意见和猜测更受赞赏(不是说不要)

【问题讨论】:

    标签: sql acl


    【解决方案1】:

    您遇到这种困境是因为您采用了一种相当非标准的方法,即默认允许访问资源。更标准的方法是默认阻止访问,通过一个或多个“允许”ACL 条目授予访问权限,并通过一个“拒绝”条目覆盖任何“允许”条目。在这种方法下,任何给定的“拒绝”条目都胜过所有“允许”条目。 (即:应用程序应该首先查找拒绝,如果找到,它甚至不需要检查允许。)

    如果您需要说服“默认阻止”是比“默认允许”更好的模型,这里有几个主要区别:

    1. 通常更适合权限的心理模型 大多数权限管理员持有的管理权限,无论他们是 IT 人员或业务角色应用程序管理员。 (的确, 这至少部分是由于大多数其他系统他们 将使用此模型进行管理,但这并没有任何意义 不太相关。)

    2. 人为错误不太可能导致不当授予 允许。 (即:如果管理员忘记添加“允许” 在默认情况下阻止的条目,没有用户最终能够访问 他不应该接触的资源。)

    3. 当一个新的权限被添加到系统中时,没有特殊的没有人 管理员权限可以访问目标资源,直到明确 添加了“允许”条目。

    #3 特别引人注目。想象一下,您部署了一个新版本的 HR 应用程序,该应用程序具有新的“查看薪水”权限。您是否认为允许所有用户被授予此权限,直到有人可以向您的 ACL 添加“拒绝”条目?

    【讨论】:

    • 我唯一关注的是默认创建一个允许,即表格上的条目会更少。但是你提出了一个很好的观点......我需要更多的回应来明确这个话题。 (+1)
    • 好的,我会默认阻止,但是allow 应该覆盖deny 吗?你有什么要说的?
    • 如果您默认阻止,则权限的默认状态是“软”拒绝。这通过明确的“允许”授权被覆盖。显式拒绝几乎必须覆盖允许,以便在这种情况下始终有用。此外,请记住,当默认情况下未授予权限时,显式拒绝使用往往相对较少。明确拒绝的最常见用途之一是列入黑名单,如果拒绝被允许压倒,这将是不可能的。
    【解决方案2】:

    在我看来,默认应该是拒绝访问,除非他们被允许作为组成员访问它(在 tbl_acl 中)。

    【讨论】:

    • 这是一个完全有争议的问题,虽然他被拒绝担任编辑,但他被允许成为会员。
    • 我认为允许应该覆盖拒绝(这只是一种意见)。因为您可以将其视为被提升为编辑的成员,因此获得了更多访问权限。
    • 假设您正在保护建筑物。您有 4 种类型的卡片(您的角色),如果用户有 2 张卡片,一张可以开门(允许),另一张不开门(拒绝),他仍然可以开门。
    • 拒绝和不允许是两种不同的情况。没有明确的“拒绝访问”卡 - 你最好把它扔进垃圾桶:-)
    【解决方案3】:

    对我来说,当权限冲突时,“允许”应该胜过“拒绝”。通常,您将拥有跨越广泛功能集的角色,但对具有更大责任的角色具有有限的权限(例如访客)。只有当您允许覆盖“拒绝”时,您才能重用一般角色。

    权限示例:

    1.

    deny members all
    allow members to view articles
    

    允许覆盖拒绝。

    1. Suman 被任命为编辑。编辑可以做一些事情,而其他一些事情被拒绝,例如权限 X。现在,如果拒绝优先于允许,则无法允许 Suman 做 X。重要的是为非常特定的权限创建角色,修改一些一般权限角色(客人、成员),否则它会双管齐下(不能否认您通过角色赋予 Suman 的特权)。

    【讨论】:

      【解决方案4】:

      我认为建筑的心理形象是合适的。 2 场景:

      “默认允许”场景:

      • 大楼的入口是开放的
      • 大楼的房间是开放的
      • 房间里的任何壁橱都打开了

      如果在这种情况下拒绝访问,它将如下所示:

      • John 不被允许进入房间 A
      • 约翰正在接近房间 A
      • 必须有人检查是不是约翰
      • 必须有人有权拒绝约翰进入房间
      • 有人当着约翰的面关上门

      这与每个房间的壁橱等相同。这是为每个想要进入房间的人完成的,并且应该与黑名单进行比较以拒绝或允许。

      这如何实用?

      “默认拒绝”场景:

      • 大楼入口已关闭并上锁
      • 大楼的房间已关闭并上锁
      • 房间内的任何壁橱都已关闭并上锁

      如果在这种情况下允许访问,它将如下所示:

      • 为大楼以及每个人需要进入的每个房间和壁橱提供一把钥匙。

      这实用吗?甚至可以给每个人一个唯一的密钥。是的,这是管理和管理的很多关键。但是胜利?它将提供粒度和灵活性,同时提高安全性。

      【讨论】:

        猜你喜欢
        • 2011-07-28
        • 2023-01-02
        • 2015-06-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-09-14
        • 2011-03-20
        • 2016-11-28
        相关资源
        最近更新 更多