Auflisten der vorhandenen SQL Server-Anmeldungen und -Benutzer

14

Ich weiß, dass wir die Logins und die definierten Benutzer über die GUI in SQL Server überprüfen können, aber ich frage mich, wie wir diese Überprüfung mithilfe von Skripten durchführen können.

Ich habe die folgende Abfrage ausgeführt, aber sie zeigt "Principal_id" an. Ich bin nicht sicher, wie ich sie zuordnen soll, um die Berechtigungsstufe zu erhalten.

SELECT * FROM Sys.login_token 

Gibt es eine integrierte gespeicherte Prozedur, die die Anmeldungen und die Benutzer mit ihrer Berechtigungsstufe auflisten kann ?

Vielen Dank.

Himmel
quelle
Definieren Sie "Berechtigungsstufe". Objektrechte, Mitgliedschaft in Datenbankrollen, Mitgliedschaft in Serverrollen?
Mrdenny
Wenn Sie Zweifel haben, schalten Sie Profiler gegen Management Studio ein und sehen Sie, was es tut.
Jon Seigel

Antworten:

14

Ich bin mir nicht sicher, ob es einen integrierten Weg gibt, aber probiere diese Abfrage für Server-Principals aus:

;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

Grundsätzlich werden die Berechtigungen erteilt und verweigert und mit der Rollenmitgliedschaft verknüpft. Es sollte Ihnen einen kurzen Überblick über die Sicherheit für Serveranmeldungen geben. Lassen Sie mich wissen, ob Sie danach suchen.

Thomas Stringer
quelle
Das war sehr nützlich! Ich habe eine String-Verkettung hinzugefügt, um "mir einen Befehl zum Erteilen / Widerrufen der Berechtigungen für jeden aufgelisteten Anmeldenamen CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQuery
anzuzeigen". Dies
8

Versuchen Sie es mit dieser Option - hier werden Benutzer, Objekte und die Berechtigungen aufgelistet, die sie für diese Objekte haben:

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

Sie sollten auch die Funktion sys.fn_my_permissions auschecken:

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

Hier sind ein paar Links, die dir auch helfen sollen:

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

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

Ich hoffe das hilft dir.

Herr Brownstone
quelle