Mendaftar Login dan Pengguna SQL Server yang ada

14

Saya tahu kita bisa memeriksa login dan pengguna yang didefinisikan, menggunakan GUI di SQL Server, tetapi saya bertanya-tanya bagaimana kita bisa melakukan pemeriksaan ini menggunakan skrip.

Saya menjalankan kueri di bawah ini tetapi itu menunjukkan Principal_id yang saya tidak yakin cara memetakan untuk mendapatkan tingkat izin.

SELECT * FROM Sys.login_token 

Jadi, apakah ada proc yang tersimpan di dalam yang dapat mencantumkan login dan pengguna dengan tingkat izin mereka ?

Terima kasih.

Langit
sumber
Tentukan "tingkat izin". Hak objek, keanggotaan peran basis data, keanggotaan peran server?
mrdenny
Jika ragu, nyalakan Profiler melawan Management Studio dan lihat apa fungsinya.
Jon Seigel

Jawaban:

14

Tidak yakin apakah ada cara bawaan, tapi coba kueri ini untuk pelaku server:

;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

Pada dasarnya apa yang dilakukannya itu mendapatkan izin yang diberikan dan ditolak, dan menyatukannya dengan peran keanggotaan. Seharusnya memberi Anda pandangan singkat tentang keamanan untuk login server. Beri tahu saya jika itu yang Anda cari.

Thomas Stringer
sumber
Ini sangat berguna! Saya menambahkan rangkaian-string ke "tunjukkan saya perintah untuk memberikan / mencabut izin untuk setiap login yang terdaftar", seperti itu - CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQueryyang membantu untuk mereplikasi izin tersebut jika Anda memigrasi server :)
NateJ
8

Coba ini - ini akan mencantumkan pengguna, objek dan izin yang mereka miliki pada objek-objek tersebut:

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

Anda juga harus memeriksa fungsi sys.fn_my_permissions:

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

Berikut adalah beberapa tautan yang seharusnya membantu Anda juga:

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

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

Saya harap ini membantu Anda.

Mr.Brownstone
sumber