2010-07-29 60 views
15

我想获取具有指定角色的所有数据库用户的列表。角色是存储过程或函数的参数。获取具有指定角色的所有数据库用户列表

Somethinf像一个带有用户名和它的角色的select语句。

+============+========== 
| User name | Role | 
+============+========== 

MS SQL Server 2008的

+0

您是在谈论系统角色还是应用程序角色? – 2010-07-29 23:58:23

+0

我正在谈论数据库角色和数据库用户。 – nik 2010-07-30 09:04:20

回答

0

可能使用这样的

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 

SmartBihari's Blog

编辑1借用来获取与用户相关联的系统角色。 sys.sysmembers是将memberuid和groupuid作为唯一列的系统视图。您可以使用user_name()函数来检索每列的名称。

USE [YourDatabase] 
SELECT user_name([memberuid]) as [Username], User_Name([groupuid]) as [Role_Name] 
FROM [sys].[sysmembers] 
+0

它没有返回用户的角色名称。 – nik 2010-07-29 12:24:53

+4

sys.sysmembers来自SQL-Server 2000. 2005/2008是向后兼容的,所以没有问题(但是),但如果你刚刚在2008年学习如何做到这一点,那么我建议使用sys.database_role_members。 – dave 2010-08-02 20:48:14

+0

很酷。感谢戴夫 – 2010-08-03 00:27:51

3

只是取决于你想如何传递参数假定你将使用角色的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 
30

在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) 
+1

增强列出登录和身份验证类型 选择\t rp.name AS DatabaseRole \t \t \t,mp.name作为成员 \t \t \t,熔点。[type_desc] AS LoginType \t \t \t,mp.authentication_type_desc AS进行AuthType FROM \t \t sys.database_role_members DRM JOIN \t \t sys.database_principals RP ON drm.role_principal_id = rp.principal_id JOIN \t \t sys.database_principals mp ON drm.member_principal_id = mp.principal_id – 2016-12-12 12:35:10

相关问题