2010-07-29 25 views
15

Deseo obtener una lista de todos los usuarios de la base de datos con el rol especificado. El rol es un parámetro para el procedimiento o función almacenada.Obtener la lista de todos los usuarios de la base de datos con el rol especificado

Somethinf como una declaración de selección con el nombre de usuario y su función.

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

MS SQL Server 2008

+0

¿Estás hablando de los roles del sistema o las funciones de la aplicación? –

+0

estoy hablando de los roles de la base de datos y los usuarios de la base de datos. – nik

Respuesta

0

utilizar Probablemente algo como esto

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 

Tomado de SmartBihari's Blog

EDIT 1 para obtener los roles del sistema asociado con un usuario. El sys.sysmembers es una vista del sistema que tiene el memberuid y el groupuid como las únicas columnas. puede usar la función user_name() para recuperar el nombre de cada columna.

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

no se devuelve nombres de rol de los usuarios. – nik

+4

sys.sysmembers es de SQL-Server 2000. 2005/2008 son compatibles con versiones anteriores, por lo que no hay problema (todavía), pero si solo está aprendiendo cómo hacerlo en 2008, le recomendaría utilizar sys.database_role_members en su lugar. – dave

+0

genial. Gracias a Dave –

3

acaba dependiendo de cómo desea pasar el parámetro ... suponiendo que va a utilizar el ID de la función

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

En SQL 2005 y 2008 esta información se accede más fácilmente en dos vistas de catálogo

Esta consulta debería proporcionarle la información que está buscando.

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

mejorada a la lista de la sesión y el tipo de autenticación SELECT \t rp.name AS DatabaseRole \t \t \t, mp.name AS miembro \t \t \t, pf. [Type_desc] AS LoginType \t \t \t, mp.authentication_type_desc AS AuthType DE \t \t sys.database_role_members DRM JOIN \t \t sys.database_principals rp EN drm.role_principal_id = rp.principal_id JOIN \t \t sys.database_principals mp ON drm.member_principal_id = mp.principal_id –

Cuestiones relacionadas