我知道标题可能有点令人困惑,但这是我能想到的最好的。 所以这是我的问题:我有一个拥有多个角色的数据库,其中一些角色作为角色成员具有其他角色,因此当用户添加到角色时,它也会自动将该用户添加到其他角色。
对于我的数据库中的exameple,如果我运行SQL:
exec sp_helprolemember op_ConfigDefault
- 这将为我提供op_ConfigDefault角色的所有成员。在这些角色中,一些成员具有实际作用。我做了一些打印屏幕更清晰
在蓝色squere中,我有成员是角色,红色正方形是普通用户。
在这里你可以看到上面的那些“成员”确实是角色。
我现在的问题是,有没有办法构建一个T-SQL,所以我只能从角色中获得角色的成员?
答案 0 :(得分:3)
我成功找到了解决方案
SELECT DbRole = g.NAME,
MemberName = u.NAME,
MemberSID = u.sid
FROM sys.database_principals u,
sys.database_principals g,
sys.database_role_members m
WHERE g.NAME = /* add role name here*/
AND g.principal_id = m.role_principal_id
AND u.principal_id = m.member_principal_id
AND u.NAME IN (
SELECT NAME
FROM sys.database_principals
WHERE type = 'R'
)
ORDER BY 1, 2