Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
van toepassing op:SQL Server
Azure SQL Database
Azure SQL Managed Instance
SQL-database in Microsoft Fabric
Evalueert de effectieve toestemming van de huidige gebruiker op een securable. Een gerelateerde functie is fn_my_permissions.
Transact-SQL syntaxis-conventies
Syntaxis
HAS_PERMS_BY_NAME ( securable , securable_class , permission
[ , sub-securable ] [ , sub-securable_class ] )
Arguments
Beveiligbare
Is de naam van de beveiligbare. Als de securable de server zelf is, moet deze waarde op NULL worden gezet.
Securable is een scalaire uitdrukking van het type sysname. Er is geen standaard.
securable_class
Is de naam van de klasse van verzekerbare goederen waartegen de toestemming wordt getoetst.
securable_class is een scalaire expressie van type nvarchar(60).
In Azure SQL Database moet het securable_class-argument worden ingesteld op een van de volgende: DATABASE,OBJECT,ROLE, SCHEMA of USER.
toestemming
Een niet-null scalaire expressie van type sysname die de te controleren toestemmingsnaam vertegenwoordigt. Er is geen standaard. De toestemmingsnaam ANY is een joker.
sub-securabel
Een optionele scalaire expressie van type sysname die de naam vertegenwoordigt van de securable sub-entity waartegen de toestemming wordt getest. De standaard is NULL.
Opmerking
Sub-securables kunnen geen haakjes gebruiken in de vorm '[subnaam]'. Gebruik in plaats daarvan 'subnaam' .
Sub-securable_class
Een optionele scalaire expressie van type nvarchar(60) die de klasse van securable subentity vertegenwoordigt waartegen de toestemming wordt getest. De standaard is NULL.
In Azure SQL Database is het sub-securable_class-argument alleen geldig als het securable_class-argument is ingesteld op OBJECT. Als het securable_class-argument op OBJECT staat, moet het sub-securable_class-argument op KOLOM worden gezet.
Retourtypen
int
Geeft NULL terug wanneer de query faalt.
Opmerkingen
Deze ingebouwde functie test of de huidige principe een bepaalde effectieve toestemming heeft voor een gespecificeerd securabel. HAS_PERMS_BY_NAME geeft 1 terug wanneer de gebruiker effectieve toestemming heeft op de securable, 0 wanneer de gebruiker geen effectieve toestemming op de securable heeft, en NULL wanneer de securable klasse of toestemming niet geldig is. Een effectieve toestemming is een van de volgende:
Een toestemming die rechtstreeks aan de directeur wordt verleend, en niet wordt geweigerd.
Een toestemming die wordt geïmpliceerd door een hogere toestemming die door de directeur wordt gehouden en niet wordt geweigerd.
Een toestemming verleend aan een rol of groep waarvan de principal lid is, en niet geweigerd.
Een toestemming die wordt gehouden door een rol of groep waarvan de principal lid is, en niet geweigerd.
De toestemmingsevaluatie wordt altijd uitgevoerd in de beveiligingscontext van de aanroeper. Om te bepalen of een andere gebruiker een effectieve toestemming heeft, moet de beller IMPERSONATE-toestemming hebben voor die gebruiker.
Voor schema-niveau entiteiten worden één-, twee- of driedelige niet-nul namen geaccepteerd. Voor database-niveau entiteiten wordt een een-delige naam geaccepteerd, waarbij een nulwaarde "huidige database" betekent. Voor de server zelf is een nullwaarde (wat "huidige server" betekent) vereist. Deze functie kan geen permissies controleren op een gekoppelde server of op een Windows-gebruiker waarvoor geen server-level principal is aangemaakt.
De volgende query geeft een lijst van ingebouwde zekere klassen terug:
SELECT class_desc FROM sys.fn_builtin_permissions(default);
De volgende collaties worden gebruikt:
Huidige database-ranglijst: Databaseniveau-securables die securables omvatten die niet door een schema worden opgenomen; één- of tweedelige schema-scoped securables; doeldatabase wanneer een naam in drie delen wordt gebruikt.
Master database collatie: Serverniveau securables.
'ANY' wordt niet ondersteund voor kolomcontroles. Je moet de juiste toestemming specificeren.
Voorbeelden
Eén. Heb ik de server-level VIEW SERVER STATE toestemming?
Van toepassing op: SQL Server 2008 (10.0.x) en later
SELECT HAS_PERMS_BY_NAME(null, null, 'VIEW SERVER STATE');
B. Kan ik serverprincipal Ps IMITEREN?
Van toepassing op: SQL Server 2008 (10.0.x) en later
SELECT HAS_PERMS_BY_NAME('Ps', 'LOGIN', 'IMPERSONATE');
C. Heb ik rechten in de huidige database?
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
D. Heeft database principal Pd enige toestemming in de huidige database?
Stel dat de beller IMPERSONATE toestemming heeft op principe Pd.
EXECUTE AS user = 'Pd'
GO
SELECT HAS_PERMS_BY_NAME(db_name(), 'DATABASE', 'ANY');
GO
REVERT;
GO
E. Kan ik procedures en tabellen maken in schema S?
Het volgende voorbeeld vereist ALTER toestemming in S en CREATE PROCEDURE toestemming in de database, en hetzelfde geldt voor tabellen.
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. Op welke tabellen heb ik SELECT-toestemming?
SELECT HAS_PERMS_BY_NAME
(QUOTENAME(SCHEMA_NAME(schema_id)) + '.' + QUOTENAME(name),
'OBJECT', 'SELECT') AS have_select, * FROM sys.tables
G. Heb ik INSERT-toestemming op de SalesPerson-tabel in AdventureWorks2022?
Het volgende voorbeeld gaat ervan AdventureWorks2025 uit dat het mijn huidige databasecontext is en gebruikt een tweedelige naam.
SELECT HAS_PERMS_BY_NAME('Sales.SalesPerson', 'OBJECT', 'INSERT');
Het volgende voorbeeld maakt geen aannames over mijn huidige databasecontext en gebruikt een naam in drie delen.
SELECT HAS_PERMS_BY_NAME('AdventureWorks2022.Sales.SalesPerson',
'OBJECT', 'INSERT');
H. Op welke kolommen van tabel T heb ik SELECT-recht?
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');
Zie ook
Machtigingen (Database Engine)
Securables
Hiërarchie van machtigingen (database-engine)
sys.fn_builtin_permissions (Transact-SQL)
Beveiligingscatalogusweergaven (Transact-SQL)