Freigeben über


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.

Themenlink (Symbol)Transact-SQL-Syntaxkonventionen

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.';