Sdílet prostřednictvím


OPRÁVNĚNÍ (Transact-SQL)

platí pro:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceSQL databáze v Microsoft Fabric

Vrací hodnotu obsahující bitmapu, která označuje oprávnění příkazu, objektu nebo sloupce aktuálního uživatele.

Důležité

Tato funkce bude odebrána v budoucí verzi SQL Serveru. Nepoužívejte tuto funkci v nové vývojové práci a naplánujte úpravu aplikací, které tuto funkci aktuálně používají. Používejte místo toho fn_my_permissions a Has_Perms_By_Name . Pokračující používání funkce OPRÁVNĚNÍ může vést ke zpomalení výkonu.

Transact-SQL konvence syntaxe

Syntaxe

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

Arguments

ID objektu
Je ID sekurable. Pokud objectid není specifikováno, bitmapová hodnota obsahuje oprávnění pro příkazy pro aktuálního uživatele; jinak bitmapa obsahuje oprávnění na zajištění pro aktuálního uživatele. Specifikované zabezpečené musí být v aktuální databázi. Použijte funkci OBJECT_ID k určení hodnoty objektid .

'sloupec'
Je volitelný název sloupce, pro který jsou vráceny informace o oprávnění. Sloupec musí být platný název sloupce v tabulce určené pomocí objectid.

Návratové typy

int

Poznámky

OPRÁVNĚNÍ lze použít k určení, zda má aktuální uživatel oprávnění potřebná k vykonání příkazu nebo k udělení oprávnění jinému uživateli.

Vrácené informace o oprávněních jsou 32bitová bitmapa.

Dolních 16 bitů odráží oprávnění udělená uživateli, stejně jako oprávnění aplikovaná na Windows skupiny nebo pevné serverové role, jejichž členem je aktuální uživatel. Například vrácená hodnota 66 (hexadecimální hodnota 0x42), když není zadáno žádné objectid , znamená, že uživatel má oprávnění spustit příkazy CREATE TABLE (desetinná hodnota 2) a BACKUP DATABASE (desetinná hodnota 64).

Horních 16 bitů odráží oprávnění, která může uživatel UDĚLIT ostatním uživatelům. Horních 16 bitů je interpretováno přesně jako u spodních 16 bitů popsaných v následujících tabulkách, s tím rozdílem, že jsou posunuty doleva o 16 bitů (násobeno 65536). Například 0x8 (desetinná hodnota 8) je bit, který označuje oprávnění INSERT, když je zadán objectid . Naopak 0x80000 (desetinná hodnota 524288) označuje možnost UDĚLIT POVOLENÍ VLOŽIT, protože 524288 = 8 x 65536.

Díky členství v rolích může uživatel, který nemá oprávnění k provádění příkazu, toto oprávnění udělit jinému uživateli.

Následující tabulka ukazuje bity používané pro oprávnění příkazů (objectid není specifikováno).

Bit (detek) Bit (hex) Povolení k výpovědi
1 0x1 VYTVOŘIT DATABÁZI (pouze hlavní databáze)
2 0x2 CREATE TABLE
4 0x4 VYTVOŘENÍ POSTUPU
8 0x8 VYTVOŘIT ZOBRAZENÍ
16 0x10 VYTVOŘIT PRAVIDLO
32 0x20 VYTVOŘIT VÝCHOZÍ
64 0x40 ZÁLOHOVAT DATABÁZI
128 0x80 ZÁLOHOVACÍ ZÁZNAM
256 0x100 Rezervováno

Následující tabulka ukazuje bity použité pro oprávnění objektu, které se vracejí, když je zadán pouze objectid .

Bit (detek) Bit (hex) Povolení k výpovědi
1 0x1 VYBRAT VŠE
2 0x2 AKTUALIZACE VŠE
4 0x4 VŠECHNY REFERENCE
8 0x8 INSERT
16 0x10 DELETE
32 0x20 EXECUTE (pouze procedury)
4096 0x1000 VYBERTE LIBOVOLNÝ (alespoň jeden sloupec)
8192 0x2000 AKTUALIZUJTE JAKÉKOLI
16384 0x4000 REFERENCE JAKÉKOLI

Následující tabulka ukazuje bity používané pro oprávnění objektů na úrovni sloupců, které se vracejí, když jsou specifikovány jak objectid, tak sloupec.

Bit (detek) Bit (hex) Povolení k výpovědi
1 0x1 SELECT
2 0x2 Aktualizace
4 0x4 REFERENCES

NULL se vrátí, když je specifikovaný parametr NULL nebo není platný (například objektid nebo sloupec, který neexistuje). Bitové hodnoty pro oprávnění, která se nevztahují (například oprávnění EXEKUT, bit 0x20, pro tabulku) nejsou definovány.

Použijte bitový operátor AND (&) k určení každého bitu nastaveného v bitmapě, který vrací funkce PERMISSIONS.

Uložená procedura sp_helprotect systému může být také použita k vrácení seznamu oprávnění uživatele v aktuální databázi.

Examples

A. Použití funkce PERMISSIONS s oprávněními pro příkazy

Následující příklad určuje, zda současný uživatel může příkaz CREATE TABLE spustit.

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

B. Použití funkce OPRÁVNĚNÍ s oprávněními objektů

Následující příklad určuje, zda může současný uživatel vložit řádek dat do tabulky Address v AdventureWorks2025 databázi.

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. Používání funkce OPRÁVNĚNÍ s oprávněními, která lze udělit

Následující příklad určuje, zda může současný uživatel udělit oprávnění INSERT na tabulce Address v AdventureWorks2025 databázi jinému uživateli.

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

Viz také

Odepřít (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
ODVOLÁNÍ (Transact-SQL)
sp_helprotect (Transact-SQL)
Systémové funkce (Transact-SQL)