Megosztás a következőn keresztül:


HAS_PERMS_BY_NAME (Transact-SQL)

A következőkre vonatkozik:SQL ServerAzure SQL DatabaseFelügyelt Azure SQL-példánySQL-adatbázis a Microsoft Fabricben

Értékeli a jelenlegi felhasználó tényleges engedélyét egy biztosított eszközön. Egy kapcsolódó funkció fn_my_permissions.

Transact-SQL szintaxis konvenciók

Szemantika

HAS_PERMS_BY_NAME ( securable , securable_class , permission    
    [ , sub-securable ] [ , sub-securable_class ] )  

Arguments

Securable
Ez a biztosított név. Ha a biztosítható maga a szerver, akkor ezt az értéket NULL-ra kell állítani. Securable a sysname típus skaláris kifejezése. Nincs alapértelmezett megoldás.

securable_class
Az a securable osztály neve, amelyen az engedélyt tesztelték. securable_class az nvarchar(60) típusú skalár kifejezés.

Az Azure SQL Database-ben a securable_class argumentumot az alábbiak egyikére kell beállítani: DATABASE,OBJECT, ROLE,SCHEMA vagy USER.

engedély
Egy nem null skaláris kifejezés sysname típussal, amely a ellenőrizendő jogosultságnévet képviseli. Nincs alapértelmezett megoldás. Az engedély neve ANY vaker név.

al-securable
Egy opcionális skaláris kifejezés sysname típussal, amely a biztosítható alentitás nevét jelenti, amelyhez az engedélyt teszteljük. Az alapértelmezett NULL.

Megjegyzés:

Az al-securable-ek nem használhatnak zárójeleket '[alnév]' formában. Használj helyette a 'alcímet' .

al-securable_class
Egy opcionális skaláris kifejezés nvarchar(60) típusú, amely azt a biztosítható alentitás osztályát képviseli, amelyhez az engedélyt tesztelték. Az alapértelmezett NULL.

Az Azure SQL Database-ben a sub-securable_class argumentum csak akkor érvényes, ha az securable_class argumentum OBJECT-re van állítva. Ha az securable_class argumentumot OBJECT-re állították, akkor az al-securable_class argumentumot COLUMN-re kell állítani.

Visszatérési típusok

int

A lekérdezés sikertelenségében NULL-t ad vissza.

Megjegyzések

Ez a beépített függvény azt vizsgálja, hogy a jelenlegi megtíz rendelkezik-e egy meghatározott biztosított joggal adott tényleges jogosultsággal. HAS_PERMS_BY_NAME akkor 1-et ad vissza, ha a felhasználónak hatékony jogosultsága van a securable-en, 0-t, ha nincs hatékony jogosultsága a securable-re, és NULL-t, ha a securable osztály vagy engedély nem érvényes. A hatékony engedély az alábbiak egyike:

  • Engedély, amelyet közvetlenül az igazgatónak adnak, és nem tagadtak meg.

  • Ez egy magasabb szintű engedély által feltételezett engedély, amelyet az igazgató birtokol, és nem tagadják meg.

  • Olyan engedély, amelyet egy olyan szerepnek vagy csoportnak adnak, amelynek a főnöke tagja, és amelyet nem tagadnak meg.

  • Egy olyan szerep vagy csoport engedélye, amelynek a főnök tagja, és amelyet nem tagadnak meg.

Az engedélyértékelést mindig a hívó biztonsági kontextusában végzik. Ahhoz, hogy megállapítsuk, van-e egy másik felhasználónak hatékony engedélye, a hívónak IMPERSONATE engedélyt kell adnia az adott felhasználón.

Sémaszintű entitások esetén egy-, két- vagy háromrészes nemnull neveket fogadnak. Adatbázis-szintű entitások esetén egyrészes név elfogadható, amelynek null értéke "aktuális adatbázist" jelent. Magához a szerverhez null érték (azaz "aktuális szerver") szükséges. Ez a funkció nem tudja ellenőrizni a jogosultságokat egy összekapcsolt szerveren vagy olyan Windows felhasználón, amelyhez nem hoztak létre szerverszintű alapvetélyt.

A következő lekérdezés a beépített securable osztályok listáját adja vissza:

SELECT class_desc FROM sys.fn_builtin_permissions(default);  

Az alábbi összeállításokat használják:

  • Jelenlegi adatbázis-összeállítás: Adatbázis-szintű értékpapírok, amelyek tartalmazzák azokat a biztosítottakat, amelyeket nem tartalmaz séma; egy- vagy kétrészes séma-szkópú értékpapírokat; Cél adatbázis, ha háromrészes nevet használsz.

  • Fő adatbázis-összeállítás: Szerverszintű biztonsági adatok.

  • Az 'ANY' nem támogatott oszlopszintű ellenőrzésekhez. Meg kell határoznia a megfelelő engedélyt.

Példák

A. Van szerverszintű VIEW SERVER STATE jogosultságom?

Érvényes: SQL Server 2008 (10.0.x) és újabb verziókra

SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');  

B. Képes vagyok szerver fő P-t személyesen megjeleníteni?

Érvényes: SQL Server 2008 (10.0.x) és újabb verziókra

SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');  

C. Vannak valamilyen jogosultságom a jelenlegi adatbázisban?

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');  

D. Van valamilyen jogosultsága az adatbázis fő Pd-nek a jelenlegi adatbázisban?

Tegyük fel, hogy a hívónak megvan a SZEMÉLYESKEDÉS engedélye a fő Pdjogon.

EXECUTE AS user = 'Pd'  
GO  
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');  
GO  
REVERT;  
GO  

E. Létrehozhatok eljárásokat és táblákat S sémában?

A következő példa engedélyt igényel ALTER az S adatbázisban és CREATE PROCEDURE az adatbázisban, hasonlóan a táblákhoz.

SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE PROCEDURE')  
    & HAS_PERMS_BY_NAME('S', 'SCHEMA', 'ALTER') AS _can_create_procs,  
    HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'CREATE TABLE') &  
    HAS_PERMS_BY_NAME('S', 'SCHEMA', 'ALTER') AS _can_create_tables;  

F. Melyik táblákon van SELECT engedélyem?

SELECT HAS_PERMS_BY_NAME  
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name),   
    'OBJECT', 'SELECT') AS have_select, * FROM sys.tables  

G. Van INSERT engedélyem az SalesPerson táblán az AdventureWorks2022-ben?

A következő példa AdventureWorks2025 feltételezi a jelenlegi adatbázis kontextusomat, és két részes nevet használ.

SELECT HAS_PERMS_BY_NAME('Sales.SalesPerson', 'OBJECT', 'INSERT');  

A következő példa nem feltételez a jelenlegi adatbázis kontextusomról, és háromrészes nevet használ.

SELECT HAS_PERMS_BY_NAME('AdventureWorks2022.Sales.SalesPerson',   
    'OBJECT', 'INSERT');  

H. A T tábla melyik oszlopainál van SELECT engedélyem?

SELECT name AS column_name,   
    HAS_PERMS_BY_NAME('T', 'OBJECT', 'SELECT', name, 'COLUMN')   
    AS can_select   
    FROM sys.columns AS c   
    WHERE c.object_id=object_id('T');  

Lásd még:

Engedélyek (Adatbázis-motor)
Securables
Engedélyhierarchia (adatbázismotor)
sys.fn_builtin_permissions (Transact-SQL)
Biztonságikatalógus nézetei (Transact-SQL)