在SQL Server中列出用户及其角色

bal*_*aji 11 sql sql-server-2005

我想获得SQL Server数据库中所有用户及其角色的列表.我想要做的是找出某些用户是否拥有多个数据库的权限.有查询可以直接执行此操作吗?

kbr*_*ton 16

我想你会发现这个资源很有帮助:

http://consultingblogs.emc.com/jamiethomson/archive/2007/02/09/SQL-Server-2005_3A00_-View-all-permissions.aspx

来自文章:

select dp.NAME AS principal_name,
       dp.type_desc AS principal_type_desc,
       o.NAME AS object_name,
       p.permission_name,
       p.state_desc AS permission_state_desc
from   sys.database_permissions p
left   OUTER JOIN sys.all_objects o
on     p.major_id = o.OBJECT_ID
inner  JOIN sys.database_principals dp
on     p.grantee_principal_id = dp.principal_id
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您只想获取一个数据库的用户和角色分配列表,您可以这样做。这适用于 Azure SQL。

select P.Name, R.Name
from sys.database_principals P 
left outer join sys.database_role_members RM on P.principal_id=RM.member_principal_id 
left outer join sys.database_principals R on R.principal_id=RM.role_principal_id
Run Code Online (Sandbox Code Playgroud)

如果您正在寻找服务器角色,请使用以下命令:

select
    u.name [user],
    r.name [role]
from 
    sys.server_principals u
    join sys.server_role_members rm 
        on u.principal_id = rm.member_principal_id
        and u.type in ('S')
    join sys.server_principals r 
        on r.principal_id = rm.role_principal_id
        and r.type in ('R')
Run Code Online (Sandbox Code Playgroud)