fn_my_permissions (Transact-SQL)
Renvoie la liste des autorisations accordées effectivement au serveur principal sur un élément sécurisable. Une fonction associée est HAS_PERMS_BY_NAME (Transact-SQL).
Syntaxe
fn_my_permissions ( securable , 'securable_class')
Arguments
securable
Nom de l'élément sécurisable. Si l'élément sécurisable est le serveur ou une base de données, cette valeur doit être définie sur NULL. securable est une expression scalaire de type sysname. securable peut être un nom en plusieurs parties.'securable_class'
Nom de la classe de l'élément sécurisable pour lequel les autorisations sont affichées. securable_class est de type sysname. securable_class doit avoir l'une des valeurs suivantes : APPLICATION ROLE, ASSEMBLY, ASYMMETRIC KEY, CERTIFICATE, CONTRACT, DATABASE, ENDPOINT, FULLTEXT CATALOG, LOGIN, MESSAGE TYPE, OBJECT, REMOTE SERVICE BINDING, ROLE, ROUTE, SCHEMA, SERVER, SERVICE, SYMMETRIC KEY, TYPE, USER, XML SCHEMA COLLECTION.
Colonnes renvoyées
Le tableau suivant répertorie les colonnes renvoyées par fn_my_permissions. Chaque ligne renvoyée décrit une autorisation détenue par le contexte de sécurité actuel sur l'élément sécurisable. Renvoie NULL si la requête échoue.
Nom de colonne |
Type |
Description |
---|---|---|
entity_name |
sysname |
Nom de l'élément sécurisable pour lequel les autorisations affichées sont effectivement accordées. |
subentity_name |
sysname |
Nom de colonne si l'élément sécurisable contient des colonnes, sinon NULL. |
permission_name |
nvarchar |
Nom de l'autorisation. |
Notes
Cette fonction table renvoie la liste des autorisations effectives détenues par le serveur principal appelant sur un élément sécurisable spécifié. Une autorisation effective peut être :
une autorisation accordée directement au serveur principal qui n'est pas refusée ;
une autorisation implicitement incluse dans une autorisation de niveau supérieur détenue par le serveur principal qui n'est pas refusée ;
une autorisation accordée à un rôle ou groupe dont le serveur principal est membre qui n'est pas refusée ;
une autorisation détenue par un rôle ou groupe dont le serveur principal est membre qui n'est pas refusée.
L'évaluation des autorisations est toujours effectuée dans le contexte de sécurité de l'appelant. Pour déterminer si un autre serveur principal dispose d'une autorisation effective, l'appelant doit disposer de l'autorisation IMPERSONATE sur ce serveur principal.
Pour les entités de niveau schéma, les noms non NULL en une, deux ou trois parties sont acceptés. Pour les entités de niveau base de données, un nom en une partie est accepté et une valeur NULL signifie « base de données active ». Pour le serveur lui-même, une valeur NULL (signifiant « serveur actif ») est requise. fn_my_permissions ne peut pas vérifier les autorisations sur un serveur lié.
La requête suivante renverra une liste de classes d'éléments sécurisables prédéfinies :
SELECT DISTINCT class_desc FROM fn_builtin_permissions(default)
ORDER BY class_desc;
GO
Si la valeur DEFAULT est attribuée à securable ou securable_class, la valeur sera interprétée comme NULL.
Exemples
A. Affichage des autorisations effectives sur le serveur
L'exemple suivant renvoie la liste des autorisations effectives détenues par l'appelant sur le serveur.
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO
B. Affichage des autorisations effectives sur la base de données
L'exemple suivant renvoie la liste des autorisations effectives détenues par l'appelant sur la base de données AdventureWorks.
USE AdventureWorks;
SELECT * FROM fn_my_permissions (NULL, 'DATABASE');
GO
C. Affichage des autorisations effectives sur une vue
L'exemple suivant renvoie la liste des autorisations effectives détenues par l'appelant sur la vue vIndividualCustomer du schéma Sales dans la base de données AdventureWorks.
USE AdventureWorks;
SELECT * FROM fn_my_permissions('Sales.vIndividualCustomer', 'OBJECT')
ORDER BY subentity_name, permission_name ;
GO
D. Affichage des autorisations effectives d'un autre utilisateur
L'exemple suivant renvoie la liste des autorisations effectives détenues par l'utilisateur de base de données Wanida sur la table Employee du schéma HumanResources dans la base de données AdventureWorks. L'appelant doit disposer de l'autorisation IMPERSONATE sur l'utilisateur Wanida.
EXECUTE AS USER = 'Wanida';
SELECT * FROM fn_my_permissions('HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name ;
REVERT;
GO
E. Affichage des autorisations effectives sur un certificat
L'exemple suivant renvoie la liste des autorisations effectives détenues par l'appelant sur un certificat nommé Shipping47 dans la base de données active.
SELECT * FROM fn_my_permissions('Shipping47', 'CERTIFICATE');
GO
F. Affichage des autorisations effectives sur une collection de schémas XML
L'exemple suivant renvoie la liste des autorisations effectives détenues par l'appelant sur une collection de schémas XML nommée ProductDescriptionSchemaCollection dans la base de données AdventureWorks.
USE AdventureWorks;
SELECT * FROM fn_my_permissions('ProductDescriptionSchemaCollection',
'XML SCHEMA COLLECTION');
GO
G. Affichage des autorisations effectives sur un utilisateur de base de données
L'exemple suivant renvoie la liste des autorisations effectives détenues par l'appelant sur un utilisateur nommé MalikAr dans la base de données active.
SELECT * FROM fn_my_permissions('MalikAr', 'USER');
GO
H. Affichage des autorisations effectives d'un autre nom de connexion
L'exemple suivant renvoie la liste des autorisations effectives détenues par le nom d'utilisateur SQL ServerWanidaBenshoof sur la table Employee du schéma HumanResources dans la base de données AdventureWorks. L'appelant doit disposer de l'autorisation IMPERSONATE sur le nom d'utilisateur SQL ServerWanidaBenshoof.
EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT * FROM fn_my_permissions('AdventureWorks.HumanResources.Employee', 'OBJECT')
ORDER BY subentity_name, permission_name ;
REVERT;
GO
Voir aussi