ACL /角色管理:管理具有多个角色的用户&相互冲突的权限

时间:2012-01-02 08:33:20

标签: sql acl

逻辑卡点。我正在构建一个简单的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。根据{{​​1}}规则,{I}应该被拒绝,tbl_acl应该被允许。

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

查看此内容的一些方法

  1. 虽然用户被拒绝作为编辑,但他作为版主可以访问该区域。
  2. 即使允许主持人访问资源,也会限制所有编辑器。
  3. 不要忘记用户也是editor。因此,如果我们优先考虑允许而不是拒绝。会员可以作为主持人访问。除非,会员也被阻止
  4. <子> 附: 我很清楚这个话题值得商榷。因此,事实将被赞赏(不是说不)超过意见和猜测。

4 个答案:

答案 0 :(得分:2)

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

如果您需要说服“默认情况下防止”是比“默认允许”更好的模型,这里有一些主要区别:

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

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

  3. 当向系统添加新权限时,没有特殊情况的人 管理员权限可以访问目标资源,直到显式 添加“允许”条目。

  4. #3特别引人注目。想象一下,您使用新的“查看工资”权限部署新版本的HR应用程序。您是否认为允许所有用户被授予此权限是可以接受的,直到有人为您的ACL添加“拒绝”条目为止?

答案 1 :(得分:0)

对于我来说'允许'应该在权限冲突时从'拒绝'获胜。通常,您将拥有跨越广泛功能集但具有有限权限(例如来宾)的角色,以及具有更高响应性的角色。只有当您允许覆盖'被拒绝'时,您才能重用一般角色。

示例权限:

1

deny members all
allow members to view articles

允许否决否定。

  1. Suman成为编辑。编辑器可以执行某些操作而被拒绝其他一些操作,例如权限X.现在,如果拒绝优先于允许,则无法允许Suman执行X.为非常特定的权限创建角色来修改一些通用非常重要。角色(客人,成员),否则会削减双方(不能否认苏曼是你通过角色给他的特权)。

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

默认情况下允许&#39;情形:

  • 大楼的入口处于打开状态
  • 大楼的房间是敞开的
  • 房间里的任何衣柜都是敞开的

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

  • John不允许进入A室
  • John正在接近A室
  • 有人必须检查是否是John
  • 有人必须有权拒绝约翰进入房间
  • 有人在John面前关上了门。

这与每个房间的衣柜等相同。这是为每个想要进入房间的人做的,应该与黑名单进行比较以拒绝或允许。

这有什么用?

默认拒绝&#39;情形:

  • 建筑物的入口已关闭并锁定
  • 大楼的房间已关闭并锁定
  • 房间内的任何衣柜都已关闭并锁定

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

  • 为建筑物以及人们需要访问的每个房间和衣柜提供钥匙。
这是实用的吗?甚至可以给每个人一个独特的钥匙。是的,这是很多管理和管理的关键。但胜利?它将提供粒度和灵活性,同时提高安全性。