Partage via


PERMISSIONS (Transact-SQL)

S’applique à : SQL Server Azure SQL Database Azure SQL Managed Instance

Retourne une valeur contenant un fichier bitmap qui indique les autorisations d'instruction, d'objet ou de colonne de l'utilisateur actuel.

Important

Cette fonctionnalité sera supprimée dans une version future de SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt fn_my_permissions et Has_Perms_By_Name. L'utilisation continue de la fonction PERMISSIONS peut entraîner une baisse des performances.

Conventions de la syntaxe Transact-SQL

Syntaxe

PERMISSIONS ( [ objectid [ , 'column' ] ] )  

Arguments

objectid
Identificateur d'un élément sécurisable. Si l’argument objectid n’est pas spécifié, la valeur de fichier bitmap contient les autorisations d’instruction de l’utilisateur actuel ; dans le cas contraire, la bitmap contient les autorisations sur l’élément sécurisable pour l’utilisateur actuel. L'élément sécurisable spécifié doit se trouver dans la base de données active. Utilisez la fonction OBJECT_ID pour déterminer la valeur objectid.

' column '
Nom facultatif de la colonne dont les informations sur les autorisations sont renvoyées. La colonne doit être un nom de colonne valide dans la table spécifiée par objectid.

Types de retour

int

Notes

La fonction PERMISSIONS peut servir à déterminer si l'utilisateur actuel possède les autorisations nécessaires pour exécuter une instruction ou pour accorder une autorisation (GRANT) à un autre utilisateur.

Les informations sur les autorisations sont renvoyées sous forme d'un fichier bitmap 32 bits.

Les 16 bits de poids faible correspondent aux autorisations accordées à l'utilisateur, mais aussi aux autorisations qui sont appliquées aux groupes Windows ou aux rôles serveur fixes auxquels l'utilisateur appartient. Par exemple, la valeur renvoyée 66 (valeur hexadécimale 0x42), lorsqu’aucun argument objectid n’est spécifié, indique que l’utilisateur a le droit d’exécuter les instructions CREATE TABLE (valeur décimale 2) et BACKUP DATABASE (valeur décimale 64).

Les 16 bits de poids fort correspondent aux autorisations que l'utilisateur peut accorder (GRANT) à d'autres utilisateurs. Ils sont interprétés exactement comme les 16 bits de poids faible décrits dans les tables ci-dessous, à ceci près qu'ils sont décalés de 16 bits vers la gauche (il faut multiplier par 65 536). Par exemple, 0x8 (valeur décimale 8) est le bit qui indique l’autorisation INSERT lorsqu’un argument objectid est spécifié. En revanche, 0x80000 (valeur décimale 524288) indique que l'autorisation INSERT peut être accordée (GRANT), parce que 524288 = 8 x 65536.

Du fait de l'appartenance aux rôles, un utilisateur qui n'a pas l'autorisation d'exécuter une instruction peut toutefois être en mesure d'accorder cette autorisation à un autre utilisateur.

Le tableau suivant indique les bits utilisés pour les autorisations d’instruction (objectid n’est pas spécifié).

Bit (dec) Bit (hex) Autorisation d'instruction
1 0x1 CREATE DATABASE (base de données master uniquement)
2 0x2 CREATE TABLE
4 0x4 CREATE PROCEDURE
8 0x8 CREATE VIEW
16 0x10 CREATE RULE
32 0x20 CREATE DEFAULT
64 0x40 BACKUP DATABASE
128 0x80 BACKUP LOG
256 0x100 Réservé

Le tableau suivant indique les bits utilisés pour les autorisations d’objet renvoyées lorsque seul l’argument objectid est spécifié.

Bit (dec) Bit (hex) Autorisation d'instruction
1 0x1 SELECT ALL
2 0x2 UPDATE ALL
4 0x4 REFERENCES ALL
8 0x8 INSERT
16 0x10 Suppression
32 0x20 EXECUTE (procédures uniquement)
4096 0x1000 SELECT ANY (une colonne minimum)
8 192 0x2000 UPDATE ANY
16384 0x4000 REFERENCES ANY

Le tableau ci-dessous indique les bits utilisés pour les autorisations d’objet renvoyées (au niveau des colonnes) lorsque l’argument objectid et la colonne sont tous deux spécifiés.

Bit (dec) Bit (hex) Autorisation d'instruction
1 0x1 SELECT
2 0x2 UPDATE
4 0x4 REFERENCES

Une valeur NULL est renvoyée si l’un des paramètres spécifiés est NULL ou non valide (par exemple, un argument objectid ou une colonne n’existe pas). Les valeurs des bits des autorisations qui ne s'appliquent pas (par exemple l'autorisation EXECUTE sur une table, bit 0x20) ne sont pas définies.

Pour déterminer chaque bit défini dans le fichier bitmap retourné par la fonction PERMISSIONS, utilisez l’opérateur de bits AND (&).

Vous pouvez également utiliser la procédure stockée système sp_helprotect pour retourner la liste des autorisations pour un utilisateur de la base de données active.

Exemples

R. Utilisation de la fonction PERMISSIONS avec des autorisations d'instruction

Cet exemple détermine si l'utilisateur actuel peut exécuter l'instruction CREATE TABLE.

IF PERMISSIONS()&2=2  
   CREATE TABLE test_table (col1 INT)  
ELSE  
   PRINT 'ERROR: The current user cannot create a table.';  

B. Utilisation de la fonction PERMISSIONS avec des autorisations d'objet

Cet exemple détermine si l'utilisateur actuel peut insérer une ligne de données dans la table Address de la base de données AdventureWorks2022.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&8=8   
   PRINT 'The current user can insert data into Person.Address.'  
ELSE  
   PRINT 'ERROR: The current user cannot insert data into Person.Address.';  

C. Utilisation de la fonction PERMISSIONS avec des autorisations pouvant être accordées

Cet exemple détermine si l'utilisateur actuel peut accorder l'autorisation INSERT sur la table Address de la base de données AdventureWorks2022 à un autre utilisateur.

IF PERMISSIONS(OBJECT_ID('AdventureWorks2022.Person.Address','U'))&0x80000=0x80000  
   PRINT 'INSERT on Person.Address is grantable.'  
ELSE  
   PRINT 'You may not GRANT INSERT permissions on Person.Address.';  

Voir aussi

DENY (Transact-SQL)
GRANT (Transact-SQL)
OBJECT_ID (Transact-SQL)
REVOKE (Transact-SQL)
sp_helprotect (Transact-SQL)
Fonctions système (Transact-SQL)