Come faccio a sapere * perché * un utente ha determinate autorizzazioni efficaci?


14

So che posso richiedere autorizzazioni efficaci usando sys.fn_my_permissions:

USE myDatabase;
SELECT * FROM fn_my_permissions('dbo.myTable', 'OBJECT') 

 entity_name | subentity_name | permission_name 
------------------------------------------------
 dbo.myTable |                | SELECT          
 dbo.myTable |                | UPDATE          
 ...

Questo mi dice se l'utente corrente dispone delle autorizzazioni SELECT, INSERT, UPDATE, ecc. myTableNel database myDatabase.

È possibile scoprire facilmente perché l'utente dispone di queste autorizzazioni? Ad esempio, mi piacerebbe avere una funzione fn_my_permissions_exche genera una reasoncolonna aggiuntiva :

USE myDatabase;
SELECT * FROM fn_my_permissions_ex('dbo.myTable', 'OBJECT') 

 entity_name | subentity_name | permission_name | reason
------------------------------------------------------------------------------------------------------------------------------------
 dbo.myTable |                | SELECT          | granted to database role public
 dbo.myTable |                | UPDATE          | member of group MYDOMAIN\Superusers, which belongs to database role db_datawriter
 ...

Sfortunatamente, non sono riuscito a trovare tale funzione nella documentazione di SQL Server. Esiste uno strumento o uno script che fornisce questa funzionalità?


perché non lo esporti in un file txt ?, quale sistema operativo stai usando?
jcho360,

1
@ jcho360: non esiste alcuna funzione fn_my_permission_ex, quindi non è possibile esportare nulla. Sto chiedendo se esiste una funzione o uno strumento con quella funzionalità .
Heinzi,

stai usando SSMS?
jcho360,

1
Domanda fantastica. Sto provando a capirlo da molto tempo. fn_my_permissions in qualche modo funziona ma mostra spesso permessi che non posso rintracciare fino a un'origine.
PseudoToad,

Risposte:


8

Puoi trovare alcune buone informazioni sulla sicurezza nell'articolo di seguito.

Revisione delle autorizzazioni di SQL Server | TechRepublic http://tek.io/KfzEyp

ad eccezione di:

La query seguente utilizza la vista di sistema sys.database_permissions per indicare quali utenti avevano autorizzazioni specifiche all'interno del database corrente.

SELECT
        dp.class_desc
       ,dp.permission_name
       ,dp.state_desc
       ,ObjectName = OBJECT_NAME(major_id)
       ,GranteeName = grantee.name
       ,GrantorName = grantor.name
    FROM
        sys.database_permissions dp
        JOIN sys.database_principals grantee
        ON dp.grantee_principal_id = grantee.principal_id
        JOIN sys.database_principals grantor
        ON dp.grantor_principal_id = grantor.principal_id
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.