如何找到与给定用户关联的数据库角色?

How to find which Database Roles are associated with a given User?

在 SSMS 中,我有一个用户 X 并且有 YZP 数据库角色可用,我如何检查哪些角色被添加到用户 X?

我尝试了什么:

在 SSMS 中右键单击数据库 -> 属性 -> 权限,然后查看用户的显式选项卡 X。我可以看到权限与角色和用户之间没有关联。我感兴趣的角色也是如此,我只看到角色的权限。

编辑:关于 GUI 解决方案,我没有可用于用户和角色的属性选项。

您可以使用 sys.database_principals 对象来找出这一点:

SELECT u.[name] AS [UserName],
       r.[name] AS RoleName 
FROM sys.database_principals u
     JOIN sys.database_role_members drm ON u.principal_id = drm.member_principal_id
     JOIN sys.database_principals r ON  drm.role_principal_id = r.principal_id
WHERE u.[type] IN ('S','U') --SQL User or Windows User
  AND u.[name] = N'X';

通过 GUI:

打开要检查的数据库,打开安全文件夹,打开用户文件夹。这里有一个为该数据库定义的用户列表。 右键单击用户 -> 属性 -> 成员资格。在这里您可以看到为该数据库定义的角色(自定义角色也在此列表中)。用户 has/is 角色的一部分,如果它前面有一个 X/mark。

通过脚本:

SELECT DP1.name AS DatabaseRoleName,   
   isnull (DP2.name, 'No members') AS DatabaseUserName   
 FROM sys.database_role_members AS DRM  
 RIGHT OUTER JOIN sys.database_principals AS DP1  
   ON DRM.role_principal_id = DP1.principal_id  
 LEFT OUTER JOIN sys.database_principals AS DP2  
   ON DRM.member_principal_id = DP2.principal_id  
WHERE DP1.type = 'R'
--AND DP2.name = 'YourUserName'
ORDER BY DP1.name; 

它列出了所有角色和属于它的用户。 (脚本来自 msdn link)。 此脚本从角色到用户。对于特定用户,请填写注释参数。或者只使用 .

我是这样做的:

select user_name(role_principal_id)
from sys.database_role_members
where member_principal_id = user_id('your_user');