PERMISSIONS (Transact-SQL)

Gilt für: SQL Server Azure SQL-Datenbank Azure SQL Managed Instance

Gibt einen Wert mit einem Bitmuster zurück, das die Anweisungs-, Objekt- oder Spaltenberechtigungen für den aktuellen Benutzer angibt.

Wichtig

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen fn_my_permissions und Has_Perms_By_Name. Wenn die PERMISSIONS-Funktion weiterhin verwendet wird, verlangsamt sich möglicherweise die Leistung.

Transact-SQL-Syntaxkonventionen

Syntax

PERMISSIONS ( [ objectid [ , 'column' ] ] )  

Argumente

objectid
Die ID eines sicherungsfähigen Elements. Falls objectid nicht angegeben wird, enthält der Bitmusterwert Anweisungsberechtigungen für den aktuellen Benutzer. Andernfalls enthält das Bitmuster Berechtigungen für das sicherungsfähige Element für den aktuellen Benutzer. Das angegebene sicherungsfähige Element muss sich in der aktuellen Datenbank befinden. Verwenden Sie die OBJECT_ID-Funktion, um den objectid-Wert zu bestimmen.

'column'
Dies ist der optionale Name einer Spalte, für die Berechtigungsinformationen zurückgegeben werden. Bei der Spalte muss es sich um einen gültigen Spaltennamen in der durch objectid angegebenen Tabelle handeln.

Rückgabetypen

int

Bemerkungen

Mithilfe von PERMISSIONS kann festgestellt werden, ob der aktuelle Benutzer über die Berechtigungen verfügt, die zum Ausführen einer Anweisung oder zum Erteilen einer Berechtigung für einen anderen Benutzer mithilfe von GRANT erforderlich sind.

Die Berechtigungsinformationen werden in Form eines 32-Bit-Bitmusters zurückgegeben.

Die niederwertigen 16 Bits spiegeln Berechtigungen wider, die dem Benutzer erteilt wurden, sowie Berechtigungen, die für Windows-Gruppen und feste Serverrollen gelten, deren Mitglied der aktuelle Benutzer ist. So zeigt z.B. ein Rückgabewert von 66 (Hexadezimalwert 0x42) bei nicht angegebenem Wert für objectid, dass der Benutzer über Ausführungsberechtigungen für die CREATE TABLE- (Dezimalwert 2) und die BACKUP DATABASE-Anweisung (Dezimalwert 64) verfügt.

Die höherwertigen 16 Bits spiegeln die Berechtigungen wider, die der Benutzer anderen Benutzern mithilfe von GRANT erteilen kann. Die höherwertigen 16 Bits werden genau wie die in den folgenden Tabellen beschriebenen niederwertigen 16 Bits interpretiert, mit der Ausnahme, dass sie um 16 Bits nach links verschoben (mit 65536 multipliziert) werden. So ist z.B. 0x8 (Dezimalwert 8) das Bit, das INSERT-Berechtigungen anzeigt, wenn ein Wert für objectid angegeben wurde. Dagegen zeigt 0x80000 (Dezimalwert 524288) die Möglichkeit zum Erteilen von Einfügerechten (INSERT-Berechtigungen) mithilfe von GRANT an, da 524288 = 8 x 65536.

Aufgrund der Mitgliedschaft in Rollen besteht die Möglichkeit, dass ein Benutzer keine Berechtigung zum Ausführen einer Anweisung besitzt, diese Berechtigung jedoch trotzdem einem anderen Benutzer erteilen kann.

Die folgende Tabelle zeigt die für Anweisungsberechtigungen verwendeten Bits (objectid ist nicht angegeben).

Bit (dez) Bit (hex) Anweisungsberechtigung
1 0x1 CREATE DATABASE (nur master-Datenbank)
2 0x2 CREATE TABLE
4 0x4 CREATE PROCEDURE
8 0x8 CREATE VIEW
16 0x10 CREATE RULE
32 0x20 CREATE DEFAULT
64 0x40 BACKUP DATABASE
128 0x80 BACKUP LOG
256 0x100 Reserviert

Die folgende Tabelle zeigt die für Objektberechtigungen verwendeten Bits, die zurückgegeben werden, wenn nur objectid angegeben wird.

Bit (dez) Bit (hex) Anweisungsberechtigung
1 0x1 SELECT ALL
2 0x2 UPDATE ALL
4 0x4 REFERENCES ALL
8 0x8 INSERT
16 0x10 Delete
32 0x20 EXECUTE (nur Prozeduren)
4096 0x1000 SELECT ANY (mindestens eine Spalte)
8192 0x2000 UPDATE ANY
16384 0x4000 REFERENCES ANY

Die folgende Tabelle zeigt die für Objektberechtigungen auf Spaltenebene verwendeten Bits, die zurückgegeben werden, wenn Werte sowohl für objectid als auch für die Spalte angegeben werden.

Bit (dez) Bit (hex) Anweisungsberechtigung
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES

NULL wird zurückgegeben, wenn ein angegebener Parameter NULL oder ungültig ist (z.B. die Angabe eines Werts für objectid oder column, für den keine Objekt-ID bzw. Spalte vorhanden ist). Die Bitwerte für Berechtigungen, die nicht anwendbar sind (z. B. EXECUTE-Berechtigung, Bit 0x20, für eine Tabelle), sind nicht definiert.

Verwenden Sie den bitweisen AND-Operator (&), um jedes festgelegte Bit in dem von der PERMISSIONS-Funktion zurückgegebenen Bitmuster zu ermitteln.

Außerdem kann die gespeicherte Systemprozedur sp_helprotect dazu verwendet werden, eine Liste mit Objektberechtigungen für einen Benutzer in der aktuellen Datenbank zurückzugeben.

Beispiele

A. Verwenden der PERMISSIONS-Funktion mit Anweisungsberechtigungen

Im folgenden Beispiel wird ermittelt, ob der aktuelle Benutzer die CREATE TABLE-Anweisung ausführen kann.

IF PERMISSIONS()&2=2  
   CREATE TABLE test_table (col1 INT)  
ELSE  
   PRINT 'ERROR: The current user cannot create a table.';  

B. Verwenden der PERMISSIONS-Funktion mit Objektberechtigungen

Im folgenden Beispiel wird bestimmt, ob der aktuelle Benutzer eine Datenzeile in die Address-Tabelle in der AdventureWorks2022-Datenbank einfügen darf.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&8=8   
   PRINT 'The current user can insert data into Person.Address.'  
ELSE  
   PRINT 'ERROR: The current user cannot insert data into Person.Address.';  

C. Verwenden der PERMISSIONS-Funktion mit erteilbaren Berechtigungen

Im folgenden Beispiel wird ermittelt, ob der aktuelle Benutzer einem anderen Benutzer die INSERT-Berechtigung für die Address-Tabelle in der AdventureWorks2022-Datenbank erteilen kann.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&0x80000=0x80000  
   PRINT 'INSERT on Person.Address is grantable.'  
ELSE  
   PRINT 'You may not GRANT INSERT permissions on Person.Address.';  

Weitere Informationen

DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
Systemfunktionen (Transact-SQL)