BEHÖRIGHETER (Transact-SQL)

Gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-databas i Microsoft Fabric

Returnerar ett värde som innehåller en bitmap som anger tillstånd för den aktuella användaren, satsen, objektet eller kolumnen.

Viktigt!

Den här funktionen tas bort i en framtida version av SQL Server. Undvik att använda den här funktionen i nytt utvecklingsarbete och planera att ändra program som för närvarande använder den här funktionen. Använd fn_my_permissions och Has_Perms_By_Name istället. Fortsatt användning av PERMISSIONS-funktionen kan resultera i långsammare prestanda.

Transact-SQL syntaxkonventioner

Syntax

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

Arguments

Objekt-ID
Är ID:t för ett säkerhetsavtal. Om objectid inte anges innehåller bitmap-värdet satsbehörigheter för den aktuella användaren; annars innehåller bitmapen behörigheter på den securable filen för den aktuella användaren. Den securable som anges måste finnas i den aktuella databasen. Använd funktionen OBJECT_ID för att bestämma objektidvärdet .

'kolumn'
Är det valfria namnet på en kolumn för vilken behörighetsinformation returneras. Kolumnen måste vara ett giltigt kolumnnamn i tabellen specificerad av objectid.

Returtyper

int

Anmärkningar

BEHÖRIGHETER kan användas för att avgöra om den nuvarande användaren har de behörigheter som krävs för att köra en sats eller för att GE en behörighet till en annan användare.

Den behörighetsinformation som returneras är en 32-bitars bitmap.

De lägre 16 bitarna speglar behörigheter som beviljats användaren, samt behörigheter som tillämpas på Windows-grupper eller fasta serverroller där den nuvarande användaren är medlem. Till exempel indikerar ett returnerat värde på 66 (hexvärde 0x42), när inget objektid är specificerat, att användaren har behörighet att köra satserna CREATE TABLE (decimalvärde 2) och BACKUP DATABASE (decimalvärde 64).

De övre 16 bitarna speglar de behörigheter som användaren kan GE till andra användare. De övre 16 bitarna tolkas exakt som de för de nedre 16 bitarna som beskrivs i följande tabeller, förutom att de är förskjutna åt vänster med 16 bitar (multiplicerat med 65536). Till exempel är 0x8 (decimalvärde 8) den bit som indikerar INSERT-behörighet när en objektid specificeras. Medan 0x80000 (decimalvärde 524288) indikerar möjligheten att GE INSÄTTNINGSBEHÖRIGHET, eftersom 524288 = 8 x 65536.

På grund av medlemskap i roller kan en användare som inte har behörighet att köra en sats ändå kunna ge den behörigheten till en annan användare.

Följande tabell visar de bitar som används för satsbehörigheter (objectid är inte specificerat).

Bit (dec) Bit (hex) Tillstånd för uttalande
1 0x1 SKAPA DATABAS (endast huvuddatabas)
2 0x2 CREATE TABLE
4 0x4 LAGRA PROCEDUR
8 0x8 SKAPA VY
16 0x10 SKAPA REGEL
32 0x20 SKAPA STANDARD
64 0x40 SÄKERHETSKOPIERINGSDATABAS
128 0x80 SÄKERHETSKOPIERINGSLOGG
256 0x100 Reserverad

Följande tabell visar de bitar som används för objektbehörigheter som returneras när endast objectid är specificerad.

Bit (dec) Bit (hex) Tillstånd för uttalande
1 0x1 VÄLJ ALLA
2 0x2 UPPDATERA ALLA
4 0x4 REFERENSER ALLA
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (endast procedurer)
4096 0x1000 VÄLJ VILKEN som helst (minst en kolumn)
8192 0x2000 UPPDATERA NÅGON
16384 0x4000 REFERENSER NÅGON

Följande tabell visar de bitar som används för kolumnnivå-objektbehörigheter som returneras när både objectid och kolumn specificeras.

Bit (dec) Bit (hex) Tillstånd för uttalande
1 0x1 SELECT
2 0x2 UPPDATERING
4 0x4 REFERENCES

En NULL returneras när en specificerad parameter är NULL eller inte giltig (till exempel en objektid eller kolumn som inte existerar). Bitvärdena för behörigheter som inte gäller (till exempel EXECUTE-behörighet, bit 0x20, för en tabell) är odefinierade.

Använd operatorn AND (&) bitvis för att bestämma varje bit som är satt i bitmapen som returneras av PERMISSIONS-funktionen.

Den sp_helprotect systemlagrade proceduren kan också användas för att returnera en lista med behörigheter för en användare i den aktuella databasen.

Examples

A. Att använda PERMISSIONS-funktionen med satsbehörigheter

Följande exempel avgör om den nuvarande användaren kan köra satsen CREATE TABLE .

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

B. Att använda PERMISSIONS-funktionen med objektbehörigheter

Följande exempel avgör om den nuvarande användaren kan infoga en datarad i Address tabellen i databasen AdventureWorks2025 .

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. Att använda PERMISSIONS-funktionen med beviljade behörigheter

Följande exempel avgör om den nuvarande användaren kan ge INSERT-behörigheten i Address tabellen i databasen AdventureWorks2025 till en annan användare.

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

Se även

NEKA (Transact-SQL)
BIDRAG (Transact-SQL)
OBJECT_ID (Transact-SQL)
ÅTERKALLA (Transact-SQL)
sp_helprotect (Transact-SQL)
Systemfunktioner (Transact-SQL)