查找具有相同安全角色组的所有用户

时间:2017-06-12 01:00:32

标签: sql sql-server sql-server-2008

SQL Server 2008 SP4

我正在尝试检查数据并确定具有共同安全角色集合的所有用户。对于匹配,他们具有相同的安全角色集合。示例数据

User_Roles

UserID RoleID
------ ------
User1  Role1
User1  Role2
User1  Role3
User2  Role1
User3  Role3
User4  Role1
User4  Role2
User4  Role3
User5  Role1
User6  Role3
User7  Role1

结果集应返回具有相同分组集合的结果

User1, User4    -- users with ROLE1,2&3
User2, User5, User7   -- users with ROLE1 ONLY
User3, User6  -- users with ROLE3 ONLY

2 个答案:

答案 0 :(得分:0)

使用STUFF

步骤1:通过STUFFing角色对每个用户的角色(按顺序)进行分组 第2步:每个分组角色的STUFF用户

reversedNames = names.sorted(by: { s1, s2 in s1 > s2 } )

答案 1 :(得分:0)

您可以使用基于集合的操作执行此操作:

with ur as (
      select ur.*, count(*) over (partition by userid) as cnt
      from user_roles ur
     )
select ur1.userid, ur2.userid
from ur ur1 join
     ur ur2
     on ur1.roleid = ur2.roleid and
        ur1.cnt = ur2.cnt and
        ur1.userid < ur2.userid
group by ur1.userid, ur2.userid, ur1.cnt
having count(*) = ur1.cnt;

这将检查两个用户之间的所有角色是否匹配,以及他们具有相同数量的角色。