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

Sql server 如何找到与给定用户关联的数据库角色?,sql-server,ssms,roles,Sql Server,Ssms,Roles,在SSMS中,我有一个用户X,并且有Y、Z和p数据库角色可用,如何检查向用户X添加了哪些角色 我试过什么: 在SSMS中,右键单击数据库->属性->权限,然后查看用户X的显式选项卡。我可以看到权限,而不是角色和用户之间的关联。我感兴趣的角色也是如此,我只看到角色的权限 编辑:关于GUI解决方案,我没有可用于用户或角色的属性选项 您可以使用sys.database\u principals对象来查找以下内容: SELECT u.[name] AS [UserName], r.[nam

在SSMS中,我有一个用户X,并且有Y、Z和p数据库角色可用,如何检查向用户X添加了哪些角色

我试过什么:

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


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

您可以使用sys.database\u 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:

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

通过脚本:

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。 这个脚本从角色到用户。对于特定用户,请填写注释参数。或者直接使用。

我这样做:

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

关于GUI解决方案,我没有可用于用户或角色的属性选项。请看一下我的编辑,谢谢。@Yoda这很奇怪。即使在我基本上没有服务器权限、数据库权限有限的服务器上,我仍然只能检查自己的用户属性。您使用的SSMS版本和SQL Server版本是什么?后者应该不重要,但SSMS版本可以。它是SSMS v17.3和MSSQL Server 2014。@Yoda您可以尝试将您的SSMS更新到更新的版本17.3已经有好几年的历史了。这似乎是一个GUI问题。由于您能够访问基础数据,因此不太可能是配股。