BERECHTIGUNGEN (Transact-SQL)

Gilt für:SQL ServerAzure SQL-DatenbankVerwaltete Azure SQL-InstanzSQL-Datenbank in Microsoft Fabric

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

PERMISSIONS können verwendet werden, um zu bestimmen, ob der aktuelle Benutzer die erforderlichen Berechtigungen hat, um eine Anweisung auszuführen, oder um eine Berechtigung an einen anderen Benutzer auszuführen GRANT .

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. Zum Beispiel zeigt ein zurückgegebener Wert von 66 (Hex-Wert 0x42), wenn keine Objektid angegeben ist, an, dass der Benutzer die Berechtigung hat, die CREATE TABLE (Dezimalwert 2) und BACKUPDATABASE (Dezimalwert 64) Anweisungen auszuführen.

Die oberen 16 Bits spiegeln die Berechtigungen wider, die der Benutzer anderen Nutzern gewährt GRANT . 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. Zum Beispiel ist 0x8 (Dezimalwert 8) das Bit, das die Berechtigung anzeigt INSERT , wenn ein Objektid angegeben wird. Wohingegen 0x80000 (Dezimalwert 524288) die Möglichkeit zur GRANTINSERT Erlaubnis anzeigt, 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 PROTOKOLL
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 ALLE AUSWÄHLEN
2 0x2 UPDATE ALLE
4 0x4 QUELLEN ALLE
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (nur Prozeduren)
4096 0x1000 SELECT ANY (mindestens eine Spalte)
8192 0x2000 UPDATE JEDER
16384 0x4000 REFERENZEN ALLE

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

Das folgende Beispiel bestimmt, ob der aktuelle Benutzer die Berechtigung INSERT für die Address Tabelle in der AdventureWorks2025 Datenbank einem anderen Benutzer 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)