我想获得具有指定角色的所有数据库用户的列表.Role是存储过程或函数的参数.
Somethinf喜欢带有用户名及其角色的select语句.
+============+==========
| User name | Role |
+============+==========
Run Code Online (Sandbox Code Playgroud)
MS SQL Server 2008
Jim*_* V. 33
在SQL 2005和2008中,可以在两个目录视图中轻松访问此信息.
此查询应该为您提供所需的信息.
select rp.name as database_role, mp.name as database_user
from sys.database_role_members drm
join sys.database_principals rp on (drm.role_principal_id = rp.principal_id)
join sys.database_principals mp on (drm.member_principal_id = mp.principal_id)
Run Code Online (Sandbox Code Playgroud)
仅取决于您想如何传递参数...假设您将使用角色的 id
declare @roleID int
select
role_principal_id as roleID,
user_name(role_principal_id) as roleName,
member_principal_id as memberID,
user_name(member_principal_id) as memberName
from
sys.database_role_members
where
role_principal_id = @roleID
Run Code Online (Sandbox Code Playgroud)
可能会使用类似这样的东西
SELECT
SU.Name AS UserName, SR.Name AS RoleName
FROM
sysUsers AS SU
INNER JOIN
sysUsers AS SR ON SU.GID = SR.UID
WHERE
SU.GID <> SU.UID
ORDER BY
RoleName, UserName
Run Code Online (Sandbox Code Playgroud)
编辑 1 获取与用户关联的系统角色。sys.sysmembers 是一个系统视图,其中仅有 memberuid 和 groupuid 列。您可以使用 user_name() 函数来检索每列的名称。
USE [YourDatabase]
SELECT user_name([memberuid]) as [Username], User_Name([groupuid]) as [Role_Name]
FROM [sys].[sysmembers]
Run Code Online (Sandbox Code Playgroud)