PERMISSIONS (Transact-SQL)
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 zukünftigen Versionen von Microsoft SQL Server nicht mehr bereitgestellt. Verwenden Sie diese Funktion beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen fn_my_permissions und HAS_PERMS_BY_NAME (Transact-SQL). Wenn Sie die PERMISSIONS-Funktion weiterhin verwenden, kann dies die Leistung beeinträchtigen.
Syntax
PERMISSIONS ( [ objectid [ , 'column' ] ] )
Argumente
objectid
Die ID des 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
Hinweise
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 AdventureWorks-Datenbank einfügen darf.
IF PERMISSIONS(OBJECT_ID('AdventureWorks.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 AdventureWorks-Datenbank erteilen kann.
IF PERMISSIONS(OBJECT_ID('AdventureWorks.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';