Angenommen, Sie sind zumindest auf SQL 2005 ...
Die relevanten Metadaten in sys.database_permissions für Datenbank sicherungsfähigen Elemente und in sys.server_permissions für Serverebene sicherungsfähigen Elemente gespeichert wird. Sie erhalten die Liste der Datenbankprinzipale (Benutzer und Rollen) von sys.database_principals, die Serverprinzipale (Logins und Serverrollen) von sys.server_principals.
Dadurch erhalten Sie die Liste der expliziten Berechtigungen, aber Sie müssen auch die impliziten Berechtigungen berücksichtigen, die nicht deklariert sind. Bestimmte Gruppen haben eine implizite Berechtigung. Um die Dinge noch weiter zu verkomplizieren, müssen Sie sich auch mit Windows-Gruppenmitgliedschaften befassen, die nicht in einer SQL-Ansicht deklariert sind, aber bei Zugriffsprüfungen berücksichtigt werden. Schließlich sind die Zugriffsregeln ziemlich kompliziert: Ein Prinzipal kann ein Privileg durch eine explizite GRANT haben, durch Mitgliedschaft in einer Gruppe, der das Privileg erteilt wurde, aber jede DENY übertrumpft alle GRANTs und das muss berücksichtigt werden, außer sicherbar Eigentum, das jeden DENY übertrumpft. Das Sahnehäubchen ist die Sysadmin-Mitgliedschaft, die alle Privilegienregeln übertrumpft: Sysadmin hat per Definition alle Privilegien.
Sie können für die meisten Principals alle Privilegien überprüfen, indem Sie den Principal über EXECUTE AS imitieren und die Ausgabe von fn_my_permissions auf dem gewünschten sicherungsfähigen System überprüfen.
Welche Version: es ist ** wirklich ** wichtig. – RBarryYoung
Einverstanden. Aber ich denke, das ist SQL 2000. Weil Manjot sagt über sysobjects, nicht sys.objects :) –
Microsoft SQL Server 2005 (SP2) – Manjot