2010-07-29 57 views
15

Tôi muốn nhận danh sách tất cả người dùng cơ sở dữ liệu có vai trò được chỉ định. Vai trò là một tham số cho thủ tục hoặc chức năng được lưu trữ.Lấy danh sách tất cả người dùng cơ sở dữ liệu có vai trò được chỉ định

Somethinf như một câu lệnh chọn có tên người dùng và vai trò của nó.

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

MS SQL Server 2008

+0

bạn đang nói về vai trò hệ thống hoặc vai trò ứng dụng? –

+0

Tôi đang nói về vai trò cơ sở dữ liệu và người dùng cơ sở dữ liệu. – nik

Trả lời

0

Có lẽ sử dụng như thế này

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 

vay từ SmartBihari's Blog

EDIT 1 Để Lấy Vai trò hệ thống liên kết với một người dùng. Các sys.sysmembers là một khung nhìn hệ thống có memberuid và groupuid là các cột duy nhất. bạn có thể sử dụng hàm user_name() để truy xuất tên của mỗi cột.

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

nó không trả về tên vai trò của người dùng. – nik

+4

sys.sysmembers là từ SQL-Server 2000. 2005/2008 là tương thích ngược, do đó, không có vấn đề (chưa), nhưng nếu bạn chỉ học cách làm điều này trong năm 2008, sau đó tôi khuyên bạn nên sử dụng sys.database_role_members thay thế. – dave

+0

tuyệt. Cảm ơn Dave –

3

chỉ tùy thuộc vào cách bạn muốn vượt qua các tham số ... giả sử bạn sẽ sử dụng id của vai trò

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

Trong SQL 2005 và 2008 thông tin này có thể dễ dàng được truy xuất trong hai chế độ xem danh mục.

Truy vấn này sẽ cung cấp cho bạn thông tin bạn đang tìm kiếm.

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

Enhanced vào danh sách đăng nhập và Kiểu xác minh CHỌN \t rp.name AS DatabaseRole \t \t \t, mp.name AS Member \t \t \t, mp. [Type_desc] AS LoginType \t \t \t, mp.authentication_type_desc AS AuthType TỪ \t \t sys.database_role_members drm THAM GIA \t \t sys.database_principals rp ON drm.role_principal_id = rp.principal_id THAM GIA \t \t sys.database_principals mp ON drm.member_principal_id = mp.principal_id –

Các vấn đề liên quan