Wie finde ich heraus, * warum * ein Benutzer bestimmte effektive Berechtigungen hat?

14

Ich weiß, dass ich effektive Berechtigungen abfragen kann, indem ich Folgendes verwende 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          
 ...

Hier erfahren Sie, ob der aktuelle Benutzer über die Berechtigungen SELECT, INSERT, UPDATE usw. myTablein der Datenbank verfügt myDatabase.

Kann man leicht herausfinden, warum der Benutzer über diese Berechtigungen verfügt? Ich hätte zum Beispiel gerne eine Funktion, fn_my_permissions_exdie eine zusätzliche reasonSpalte ausgibt :

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

Leider konnte ich eine solche Funktion in der SQL Server-Dokumentation nicht finden. Gibt es ein Tool oder Skript, das diese Funktionalität bietet?

Heinzi
quelle
Warum exportieren Sie es nicht in eine TXT-Datei? Welches Betriebssystem verwenden Sie?
jcho360
1
@ jcho360: Es gibt keine Funktion fn_my_permission_ex, also nichts, was ich exportieren könnte. Ich frage, ob es eine Funktion oder ein Tool mit dieser Funktionalität gibt .
Heinzi
Verwenden Sie SSMS?
jcho360
1
Ehrfürchtige Frage. Ich habe sehr lange versucht, das herauszufinden. fn_my_permissions funktioniert ein bisschen, zeigt aber häufig Berechtigungen an, die ich nicht bis zu einem Ursprung aufspüren kann.
PseudoToad

Antworten:

8

In dem folgenden Artikel finden Sie einige gute Informationen zur Sicherheit.

Überprüfen der SQL Server-Berechtigungen TechRepublic http://tek.io/KfzEyp

Außer:

In der folgenden Abfrage wird in der Systemansicht sys.database_permissions angegeben, welche Benutzer über bestimmte Berechtigungen in der aktuellen Datenbank verfügten.

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
quelle