Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie kann ich alle Zuschüsse für eine SQL-Datenbank anzeigen?

Die angegebene Lösung deckt nicht ab, wo die Berechtigung für das Schema oder die Datenbank selbst erteilt wird, die auch Berechtigungen für die Tabellen erteilen. Dies wird Ihnen auch diese Situationen geben. Sie können eine WHERE-Klausel gegen permission_name verwenden, um nur auf DELETE zu beschränken.

SELECT 
    class_desc 
  , CASE WHEN class = 0 THEN DB_NAME()
         WHEN class = 1 THEN OBJECT_NAME(major_id)
         WHEN class = 3 THEN SCHEMA_NAME(major_id) END [Securable]
  , USER_NAME(grantee_principal_id) [User]
  , permission_name
  , state_desc
FROM sys.database_permissions

Außerdem müsste db_datawriter auf Mitgliedschaft überprüft werden, da es implizite INSERT-, UPDATE- und DELETE-Rechte gibt, was bedeutet, dass Sie es nicht in den Berechtigungs-DMVs oder ihren Derivaten sehen werden.