Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL 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.
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)
sp_helprotect (Transact-SQL)
Systémové funkce (Transact-SQL)