Delen via


TOESTEMMINGEN (Transact-SQL)

van toepassing op:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL-database in Microsoft Fabric

Geeft een waarde terug met een bitmap die de instructie-, object- of kolomrechten van de huidige gebruiker aangeeft.

Belangrijk

Deze functie wordt verwijderd in een toekomstige versie van SQL Server. Vermijd het gebruik van deze functie in nieuwe ontwikkelwerkzaamheden en plan om toepassingen te wijzigen die momenteel gebruikmaken van deze functie. Gebruik fn_my_permissions en Has_Perms_By_Name in plaats daarvan. Voortgezet gebruik van de PERMISSIONS-functie kan resulteren in lagere prestaties.

Transact-SQL syntaxis-conventies

Syntaxis

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

Arguments

Object
Is de ID van een verzekerde handelbare. Als objectid niet is gespecificeerd, bevat de bitmapwaarde statementrechten voor de huidige gebruiker; anders bevat de bitmap rechten op de securable voor de huidige gebruiker. De gespecificeerde securable moet in de huidige database staan. Gebruik de functie OBJECT_ID om de objectidwaarde te bepalen.

'kolom'
Is de optionele naam van een kolom waarvoor toestemmingsinformatie wordt teruggegeven. De kolom moet een geldige kolomnaam zijn in de tabel die objectid specificeert.

Retourtypen

int

Opmerkingen

PERMISSIONS kunnen worden gebruikt om te bepalen of de huidige gebruiker de benodigde rechten heeft om een instructie uit te voeren of om een machtiging aan een andere gebruiker te VERLENEN.

De teruggegeven permissie-informatie is een 32-bits bitmap.

De onderste 16 bits weerspiegelen de rechten die aan de gebruiker zijn verleend, evenals de rechten die worden toegepast op Windows-groepen of vaste serverrollen waarvan de huidige gebruiker lid is. Bijvoorbeeld, een teruggegeven waarde van 66 (hex-waarde 0x42), wanneer geen objectid is opgegeven, geeft aan dat de gebruiker toestemming heeft om de CREATE TABLE (decimale waarde 2) en BACKUP DATABASE (decimale waarde 64) uit te voeren.

De bovenste 16 bits geven de rechten weer die de gebruiker aan andere gebruikers kan GEVEN. De bovenste 16 bits worden precies geïnterpreteerd als die voor de onderste 16 bits beschreven in de volgende tabellen, behalve dat ze naar links zijn verschoven met 16 bits (vermenigvuldigd met 65536). Bijvoorbeeld, 0x8 (decimale waarde 8) is de bit die INSERT-toestemming aangeeft wanneer een objectid wordt gespecificeerd. Terwijl 0x80000 (decimale waarde 524288) de mogelijkheid aangeeft om INVOEG-toestemming te VERLENEN, omdat 524288 = 8 x 65536.

Vanwege lidmaatschap van rollen kan een gebruiker die geen toestemming heeft om een instructie uit te voeren die toestemming toch aan een andere gebruiker geven.

De volgende tabel toont de bits die worden gebruikt voor statement-rechten (objectid is niet gespecificeerd).

Bit (dec) Bit (hex) Toestemming voor de verklaring
1 0x1 CREATE DATABASE (alleen hoofddatabase)
2 0x2 CREATE TABLE
4 0x4 Aanmaken van procedure
8 0x8 VIEW AANMAKEN
16 0x10 REGEL MAKEN
32 0x20 STANDAARD MAKEN
64 0x40 BACK-UP DATABASE
128 0x80 BACKUPLOG
256 0x100 Gereserveerd

De volgende tabel toont de bits die worden gebruikt voor objectrechten die worden teruggegeven wanneer alleen objectid is opgegeven.

Bit (dec) Bit (hex) Toestemming voor de verklaring
1 0x1 SELECTEER ALLES
2 0x2 UPDATE ALLES
4 0x4 REFERENTIES ALLEMAAL
8 0x8 INSERT
16 0x10 Verwijderen
32 0x20 EXECUTE (alleen procedures)
4096 0x1000 SELECTEER ELKE (ten minste één kolom)
8192 0x2000 UPDATE ANY
16384 0x4000 REFERENTIES ELKE

De volgende tabel toont de bits die worden gebruikt voor kolomniveau-objectmachtigingen die worden teruggegeven wanneer zowel objectid als kolom worden opgegeven.

Bit (dec) Bit (hex) Toestemming voor de verklaring
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES

Een NULL wordt teruggegeven wanneer een gespecificeerde parameter NULL of niet geldig is (bijvoorbeeld een objectid of kolom die niet bestaat). De bitwaarden voor permissies die niet van toepassing zijn (bijvoorbeeld EXECUTE-toestemming, bit 0x20, voor een tabel) zijn niet gedefinieerd.

Gebruik de bitgewijze operator AND (&) om elke bit in de bitmap te bepalen die door de PERMISSIONS-functie wordt teruggegeven.

De sp_helprotect systeemopslagprocedure kan ook worden gebruikt om een lijst met rechten voor een gebruiker in de huidige database terug te geven.

Voorbeelden

Eén. Gebruik van de PERMISSIONS-functie met statement-permissies

Het volgende voorbeeld bepaalt of de huidige gebruiker de CREATE TABLE instructie kan uitvoeren.

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

B. Gebruik van de PERMISSIONS-functie met objectrechten

Het volgende voorbeeld bepaalt of de huidige gebruiker een rij gegevens in de Address tabel in de AdventureWorks2025 database kan invoegen.

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. Gebruik van de PERMISSIONS-functie met toekenbare rechten

Het volgende voorbeeld bepaalt of de huidige gebruiker de INSERT-toestemming op de Address tabel in de AdventureWorks2025 database aan een andere gebruiker kan geven.

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

Zie ook

ONTKENNEN (Transact-SQL)
SUBSIDIE (Transact-SQL)
OBJECT_ID (Transact-SQL)
INTREKKEN (Transact-SQL)
sp_helprotect (Transact-SQL)
Systeemfuncties (Transact-SQL)