sys.fn_my_permissions (Transact-SQL)

Renvoie la liste des autorisations accordées effectivement au principal sur un élément sécurisable. Une fonction associée est HAS_PERMS_BY_NAME.

Icône Lien de rubriqueConventions de syntaxe de 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 retournées

Le tableau suivant répertorie les colonnes retourné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 principal appelant sur un élément sécurisable spécifié. Une autorisation effective peut être :

  • une autorisation accordée directement au principal qui n'est pas refusée ;

  • une autorisation impliquée par une autorisation de niveau supérieur détenue par le principal et non refusée ;

  • une autorisation accordée à un rôle ou à un groupe dont le principal est membre et non refusé ;

  • une autorisation détenue par un rôle ou un groupe dont le principal est membre et non refusé.

L'évaluation des autorisations est toujours effectuée dans le contexte de sécurité de l'appelant. Pour déterminer si un autre principal dispose d'une autorisation effective, l'appelant doit disposer de l'autorisation IMPERSONATE sur ce 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 renvoie la liste des classes intégrées des éléments sécurisables :

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 AdventureWorks2008R2.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2. 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 AdventureWorks2008R2.

USE AdventureWorks2008R2;
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 AdventureWorks2008R2. L'appelant doit disposer de l'autorisation IMPERSONATE sur le nom d'utilisateur SQL ServerWanidaBenshoof.

EXECUTE AS LOGIN = 'WanidaBenshoof';
SELECT * FROM fn_my_permissions('AdventureWorks2008R2.HumanResources.Employee', 'OBJECT') 
    ORDER BY subentity_name, permission_name ;  
REVERT;
GO