Elenco degli accessi e degli utenti di SQL Server esistenti


14

So che possiamo controllare gli accessi e gli utenti che sono definiti, usando la GUI in SQL Server, ma mi chiedo come possiamo fare questo controllo usando lo script.

Ho eseguito la query di seguito, ma mostra Principal_id che non sono sicuro di come mappare per ottenere il livello di autorizzazione.

SELECT * FROM Sys.login_token 

Quindi c'è qualche proc memorizzato incorporato che può elencare gli accessi e gli utenti con il loro livello di autorizzazione ?

Grazie.


Definire "livello di autorizzazione". Diritti oggetto, appartenenza al ruolo del database, appartenenza al ruolo del server?
mrdenny,

In caso di dubbio, attiva Profiler contro Management Studio e vedi cosa fa.
Jon Seigel,

Risposte:


14

Non sono sicuro se esiste un modo integrato, ma prova questa query per i server principali:

;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

Fondamentalmente ciò che fa ottiene le autorizzazioni concesse e negate e le unisce con l'appartenenza al ruolo. Dovrebbe darti una breve occhiata sulla sicurezza degli accessi al server. Fammi sapere se è quello che stai cercando.


Questo è stato molto utile! Ho aggiunto una concatenazione di stringhe per "mostrami un comando per concedere / revocare le autorizzazioni a ciascun accesso elencato", in questo modo - il CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQueryche aiuta a replicare quelle autorizzazioni se stai migrando un server :)
NateJ

8

Prova questo: questo elencherà gli utenti, gli oggetti e le autorizzazioni che hanno su quegli oggetti:

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

Dovresti anche dare un'occhiata alla funzione sys.fn_my_permissions:

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

Ecco alcuni link che dovrebbero aiutarti anche:

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

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

Spero che questo ti aiuta.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.