Verwenden von EXECUTE AS zum Erstellen benutzerdefinierter Berechtigungssätze

Das Festlegen eines Ausführungskontextes für ein Modul kann sich bei der Definition von benutzerdefinierten Berechtigungssätzen als sehr nützlich erweisen. Einige Aktionen, wie beispielsweise TRUNCATE TABLE, besitzen keine erteilbaren Berechtigungen. Um TRUNCATE TABLE auszuführen, benötigt der Benutzer für die festgelegte Tabelle die ALTER-Berechtigungen. Die Erteilung der ALTER-Berechtigungen für eine Tabelle kann sich als nicht ideal erweisen, weil der Benutzer dann Berechtigungen besitzt, die über die Möglichkeit hinausgehen, die Tabelle abzuschneiden.

Durch die Aufnahme der TRUNCATE TABLE-Anweisung innerhalb eines Moduls und durch die Festlegung, dass das Modul als Benutzer mit der Berechtigung zur Tabellenänderung ausgeführt wird, können Sie die Berechtigungen zum Abschneiden der Tabelle auf alle Benutzer ausdehnen, denen Sie die EXECUTE-Berechtigungen für das Modul erteilen.

Sehen Sie sich diese gespeicherte Prozedur an:

CREATE PROCEDURE TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;

Angenommen, Mary erstellt diese Prozedur und erteilt Scott die Berechtigung TruncateMyTable. Wenn Scott die gespeicherte Prozedur ausführt, überprüft Database Engine (Datenbankmodul) die Berechtigungen zum Abschneiden der Tabelle, so als würde Mary selbst die gespeicherte Prozedur ausführen. Da sie Tabellenbesitzer ist, ist die Anweisung erfolgreich, obwohl Scott über keine direkten Berechtigungen für die Tabelle verfügt. So hat Mary die Berechtigungen schnell und effizient auf Scott ausgeweitet, ohne ihm mehr Berechtigungen zu erteilen, als dies für die Aufgabe notwendig ist.