Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-databas i Microsoft Fabric
Utvärderar den nuvarande användarens effektiva tillstånd på en securable. En relaterad funktion är fn_my_permissions.
Transact-SQL syntaxkonventioner
Syntax
HAS_PERMS_BY_NAME ( securable , securable_class , permission
[ , sub-securable ] [ , sub-securable_class ] )
Arguments
Sekurerbart
Är namnet på det securable. Om securable är servern själv ska detta värde sättas till NULL.
securable är ett skalärt uttryck av typen sysname. Det finns ingen standard.
securable_class
Är namnet på den klass av värdebärande som tillståndet prövas mot.
securable_class är ett skalärt uttryck av typen nvarchar(60).
I Azure SQL Database måste argumentet securable_class sättas till en av följande: DATABASE,OBJECT,ROLE,SCHEMA eller USER.
tillåtelse
Ett icke-null skalärt uttryck av typen sysname som representerar det behörighetsnamn som ska kontrolleras. Det finns ingen standard. Behörighetsnamnet ANY är ett jokerkort.
del-securable
Ett valfritt skalärt uttryck av typen sysname som representerar namnet på den securable underenhet mot vilken behörigheten testas. Standardvärdet är NULL.
Anmärkning
Under-securables kan inte använda parenteser i formen '[subnamn]'. Använd istället 'sub name' .
Sub-securable_class
Ett valfritt skalärt uttryck av typen nvarchar(60) som representerar klassen av securable subentities som tillståndet testas mot. Standardvärdet är NULL.
I Azure SQL Database är sub-securable_class-argumentet giltigt endast om securable_class-argumentet är satt till OBJECT. Om securable_class-argumentet är satt till OBJEKT måste sub-securable_class-argumentet sättas till KOLUMN.
Returtyper
int
Returnerar NULL när frågan misslyckas.
Anmärkningar
Denna inbyggda funktion testar om den nuvarande huvudpersonen har en särskild effektiv behörighet för en specificerad securable. HAS_PERMS_BY_NAME returnerar 1 när användaren har effektiv behörighet på securablen, 0 när användaren inte har någon effektiv behörighet på securablen, och NULL när securable-klassen eller behörigheten inte är gäldig. Ett effektivt tillstånd är något av följande:
Ett tillstånd som ges direkt till rektorn, och inte nekas.
Ett tillstånd som underförstås av ett högre tillstånd som innehas av rektorn och inte nekas.
Ett tillstånd som ges till en roll eller grupp där huvudpersonen är medlem, och som inte nekas.
Ett tillstånd som innehas av en roll eller grupp där huvudmannen är medlem, och som inte nekas.
Behörighetsutvärderingen utförs alltid i säkerhetskontexten hos anroparen. För att avgöra om någon annan användare har en effektiv behörighet måste den som ringer ha IMPERSONATE-behörighet på den användaren.
För schema-nivåenheter accepteras en-, två- eller tredelade icke-nullnamn. För databasnivåenheter accepteras ett endelat namn, där ett nollvärde betyder "aktuell databas". För själva servern krävs ett nollvärde (det vill säga "nuvarande server"). Denna funktion kan inte kontrollera behörigheter på en länkad server eller på en Windows-användare för vilken ingen servernivåprincip har skapats.
Följande fråga kommer att returnera en lista över inbyggda sekurerbara klasser:
SELECT class_desc FROM sys.fn_builtin_permissions(default);
Följande kollationer används:
Aktuell databassortering: Databasnivå-securables som inkluderar securables som inte ingår i ett schema; en- eller tvådelade schema-scoped securables; måldatabas när man använder ett tredelat namn.
Huvuddatabas-sammanställning: Servernivå-securables.
'ANY' stöds inte för kontroller på kolumnnivå. Du måste ange rätt tillstånd.
Examples
A. Har jag servernivåbehörigheten VIEW SERVER STATE?
Gäller för: SQL Server 2008 (10.0.x) och senare
SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');
B. Kan jag IMITERA serverprincipal Ps?
Gäller för: SQL Server 2008 (10.0.x) och senare
SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');
C. Har jag några behörigheter i den aktuella databasen?
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
D. Har databasens huvudansvariga Pd någon behörighet i den aktuella databasen?
Anta att uppringaren har UTGER sig för att vara UTGIVEN av princip.Pd
EXECUTE AS user = 'Pd'
GO
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
GO
REVERT;
GO
E. Kan jag skapa procedurer och tabeller i schema S?
Följande exempel kräver ALTER behörighet i S och CREATE PROCEDURE behörighet i databasen, och på liknande sätt för tabeller.
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. Vilka tabeller har jag SELECT-behörighet på?
SELECT HAS_PERMS_BY_NAME
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name),
'OBJECT', 'SELECT') AS have_select, * FROM sys.tables
G. Har jag behörighet INSERT i tabellen SalesPerson i AdventureWorks2022?
Följande exempel antar AdventureWorks2025 att det är min nuvarande databaskontext och använder ett tvådelat namn.
SELECT HAS_PERMS_BY_NAME('Sales.SalesPerson', 'OBJECT', 'INSERT');
Följande exempel gör inga antaganden om min nuvarande databaskontext och använder ett tredelat namn.
SELECT HAS_PERMS_BY_NAME('AdventureWorks2022.Sales.SalesPerson',
'OBJECT', 'INSERT');
H. Vilka kolumner i tabell T har jag SELECT-behörighet på?
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');
Se även
Behörigheter (Databasmotor)
Securables
Behörighetshierarki (databasmotor)
sys.fn_builtin_permissions (Transact-SQL)
Säkerhetskatalogvyer (Transact-SQL)