Mevcut SQL Server Girişlerini ve Kullanıcılarını Listeleme


14

SQL Server'da GUI kullanarak, girişleri ve tanımlanmış kullanıcıları kontrol edebileceğimizi biliyorum, ancak komut dosyasını kullanarak bu kontrolü nasıl yapabileceğimizi merak ediyorum.

Aşağıdaki sorguyu çalıştırdım ama izin düzeyini almak için nasıl harita emin değilim Principal_id gösterir.

SELECT * FROM Sys.login_token 

Peki, oturum açma bilgilerini ve kullanıcıları izin düzeyleriyle listeleyebilecek yerleşik bir saklı proc var mı?

Teşekkür ederim.


"İzin seviyesini" tanımlayın. Nesne hakları, veritabanı rolü üyeliği, sunucu rolü üyeliği?
mrdenny

Şüphe duyduğunuzda Profiler'ı Management Studio'ya karşı açın ve ne yaptığını görün.
Jon Seigel

Yanıtlar:


14

Yerleşik bir yol olup olmadığından emin değilim, ancak bu sorguyu sunucu yöneticileri için deneyin:

;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

Temel olarak ne yaparsa izinler verilir ve reddedilir ve rol üyeliği ile birleştirilir. Sunucu oturum açma güvenliğine kısaca bir göz atmalıdır. Aradığın şey olup olmadığını bana bildirin.


Bu çok faydalı oldu! "Bana listelenen her giriş için izinleri vermek / iptal etmek için bir komut göstermek" için bir dize birleştirme ekledim, böyle - CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQuerybir sunucuyu
taşıyorsanız

8

Bunu deneyin - kullanıcılar, nesneler ve bu nesneler üzerinde sahip oldukları izinleri listeler:

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

Ayrıca sys.fn_my_permissions işlevini de kontrol etmelisiniz:

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

İşte size yardımcı olacak birkaç bağlantı:

İZİNLER: http://msdn.microsoft.com/en-us/library/ms191291.aspx

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

Umarım bu sana yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.