Comment savoir * pourquoi * un utilisateur dispose de certaines autorisations effectives?

14

Je sais que je peux interroger les autorisations effectives en utilisant 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          
 ...

Cela me dit si l'utilisateur actuel a les autorisations SELECT, INSERT, UPDATE, etc. sur myTabledans la base de données myDatabase.

Est-il possible de savoir facilement pourquoi l'utilisateur dispose de ces autorisations? Par exemple, j'aimerais avoir une fonction fn_my_permissions_exqui génère une reasoncolonne supplémentaire :

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
 ...

Malheureusement, je n'ai pas pu trouver une telle fonction dans la documentation de SQL Server. Existe-t-il un outil ou un script qui fournit cette fonctionnalité?

Heinzi
la source
pourquoi ne l'exportez-vous pas dans un fichier txt ?, quel système d'exploitation utilisez-vous?
jcho360
1
@ jcho360: Il n'y a pas de fonction fn_my_permission_ex, donc il n'y a rien que je puisse exporter. Je demande s'il existe une fonction ou un outil avec cette fonctionnalité .
Heinzi
utilisez-vous SSMS?
jcho360
1
Super question. J'essaie de comprendre cela depuis très très longtemps. fn_my_permissions fonctionne un peu mais montre souvent des autorisations que je ne peux pas retrouver jusqu'à une origine.
PseudoToad

Réponses:

8

Vous pouvez trouver de bonnes informations concernant la sécurité dans l'article ci-dessous.

Vérification des autorisations SQL Server | TechRepublic http://tek.io/KfzEyp

Sauf:

La requête suivante utilise la vue système sys.database_permissions pour indiquer quels utilisateurs avaient des autorisations spécifiques dans la base de données actuelle.

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
jgardner04
la source