Liệt kê các Đăng nhập và Người dùng SQL Server hiện có


14

Tôi biết chúng ta có thể kiểm tra thông tin đăng nhập và người dùng được xác định, sử dụng GUI trong SQL Server, nhưng tôi tự hỏi làm thế nào chúng ta có thể thực hiện kiểm tra này bằng cách sử dụng tập lệnh.

Tôi đã chạy truy vấn bên dưới nhưng nó hiển thị Principal_id mà tôi không chắc cách lập bản đồ để có được cấp phép.

SELECT * FROM Sys.login_token 

Vì vậy, có bất kỳ Proc lưu trữ tích hợp nào có thể liệt kê thông tin đăng nhập và người dùng với mức độ cho phép của họ không?

Cảm ơn bạn.


Xác định "mức cho phép". Quyền đối tượng, thành viên cơ sở dữ liệu, thành viên vai trò máy chủ?
mrdenny

Khi nghi ngờ, hãy bật Profiler với Management Studio và xem những gì nó làm.
Jon Seigel

Câu trả lời:


14

Không chắc chắn nếu có một cách tích hợp, nhưng hãy thử truy vấn này cho các hiệu trưởng máy chủ:

;with ServerPermsAndRoles as
(
    select
        spr.name as principal_name,
        spr.type_desc as principal_type,
        spm.permission_name collate SQL_Latin1_General_CP1_CI_AS as security_entity,
        'permission' as security_type,
        spm.state_desc
    from sys.server_principals spr
    inner join sys.server_permissions spm
    on spr.principal_id = spm.grantee_principal_id
    where spr.type in ('s', 'u')

    union all

    select
        sp.name as principal_name,
        sp.type_desc as principal_type,
        spr.name as security_entity,
        'role membership' as security_type,
        null as state_desc
    from sys.server_principals sp
    inner join sys.server_role_members srm
    on sp.principal_id = srm.member_principal_id
    inner join sys.server_principals spr
    on srm.role_principal_id = spr.principal_id
    where sp.type in ('s', 'u')
)
select *
from ServerPermsAndRoles
order by principal_name

Về cơ bản những gì nó làm được các quyền được cấp và từ chối, và liên kết nó với tư cách thành viên. Nó sẽ cung cấp cho bạn một cái nhìn ngắn gọn về bảo mật cho đăng nhập máy chủ. Hãy cho tôi biết nếu đó là những gì bạn đang tìm kiếm.


Điều này rất hữu ích! Tôi đã thêm một chuỗi nối để "hiển thị cho tôi lệnh cấp / thu hồi quyền cho mỗi lần đăng nhập được liệt kê", như vậy - CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQuerygiúp sao chép các quyền đó nếu bạn đang di chuyển máy chủ :)
NateJ

8

Hãy thử cái này - cái này sẽ liệt kê người dùng, đối tượng và các quyền mà họ có trên các đối tượng đó:

SELECT p.name, o.name, d.*
FROM sys.database_principals AS p
JOIN sys.database_permissions AS d ON d.grantee_principal_id = p.principal_id
JOIN sys.objects AS o ON o.object_id = d.major_id

Bạn cũng nên kiểm tra hàm sys.fn_my_permissions:

http://msdn.microsoft.com/en-us/l Library / ms188367.aspx

Dưới đây là một vài liên kết sẽ giúp bạn:

GIẤY PHÉP: http://msdn.microsoft.com/en-us/l Library / ms191291.aspx

SYS.DATABASE_PERMISSIONS: http://msdn.microsoft.com/en-us/l Library / ms188367.aspx

Tôi hy vọng cái này sẽ giúp bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.