在成员资格中循环层次结构,找出用户的权限

时间:2011-07-20 23:14:58

标签: sql permissions membership

我对下面的问题感到很疯狂 有用户和组,这些组可以包含用户和其他组:
CREATE TABLE GroupMembership (GroupMembershipID, GroupID, GroupTypeID, MemberID, MemberTypeID)
字段 GroupTypeID MebmerTypeID 需要提供类型,因为我有各种类型的组和成员。
让我称为吉姆,我有一个小组“吉姆的朋友”,其中包含用户鲍勃,简和小组“杰里的朋友”。与此同时,杰里的小组“杰里的朋友”包含史蒂夫,克洛伊是“吉姆的小组”。我们现在可以看到,我和Jerry之间有一个循环引用。每个人都说层次结构中的循环是一个错误。我的情况怎么样?有办法避免循环吗?

现在是第二个问题。 我有一个表Permission,描述了主题对某些对象的权限:
CREATE TABLE Permission (PermissionID, SubjectID, SubjectTypeID, ObjectID, ObjectTypeID, PermissionTypeID, [Value])
每个主题(用户,组或其他)都对某个对象具有明确的权限。 在结束时,为了找出某个用户对某个对象的权限,我必须呈现所有用户的成员树(通过GroupMembership),而不是将其加入Permission并确定最接近的(在GroupMembership层次结构中)和最佳权限。登记/> 看起来这是一种常见的方式,不是吗?

所以,在这个范围内我需要解决下一个任务:
1)找出用户对特定对象的许可
2)找出特定用户允许的所有对象
3)找出对某个对象具有明确权限的所有用户
看起来这是一项常见的任务,对吗?

首先,我想创建一个通用视图,它代表一个主题,一个对象和该对象的实际权限(记住GroupMembership中的层次结构!)。它可以让我轻松查询它或加入其他查询。我一直试图在适当的时候做出适当的SELECT,但这对于一个任务来说是好的而对另一个任务来说非常糟糕(有完整的扫描等)。如果我发挥作用,情况也是如此。现在我已经完全失败了:(我不知道解决这些任务的好方法。架构和任务看起来很常见,但我找不到互联网上类似问题的解决方案。
您能否提供链接,建议或指出我的错误? 非常感谢,
吉姆。

1 个答案:

答案 0 :(得分:0)

你无法在SQL中真正做到这一点。一组中的一组?无法生成可以执行此操作的查询。在SQL之外做。

您可以制作:群组:可以包含用户(但不包含群组)。超级组:可以包含组,但不包含超级组或用户。这将更容易处理。

此外,如果您坚持使用您的结构,请不要将两个用户和组放在同一个表中。制作两个表:一个组中的组表,以及组中用户的表。

像你这样的组合是SQL的噩梦。