PERMISSIONS (Transact-SQL)
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 prochaine version de Microsoft 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, l'image 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 retournée 66 (valeur hexadécimale 0x42), lorsqu'aucun objectid n'est spécifié, indique que l'utilisateur a le doit 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 les autorisations INSERT lorsqu'un 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 ci-dessous 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 ci-dessous indique les bits utilisés pour les autorisations d'objet retourné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 |
DELETE |
32 |
0x20 |
EXECUTE (procédures uniquement) |
4096 |
0x1000 |
SELECT ANY (une colonne minimum) |
8192 |
0x2000 |
UPDATE ANY |
16384 |
0x4000 |
REFERENCES ANY |
Le tableau ci-dessous indique les bits utilisés pour les autorisations d'objet retournées (au niveau des colonnes) lorsque objectid et les colonnes 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 retournée si l'un des paramètres spécifiés est NULL ou non valide (par exemple, un objectid ou une colonne qui n'existent 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 une liste d'autorisations pour un utilisateur de la base de données active.
Exemples
A.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 AdventureWorks2012.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.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 AdventureWorks2012 à un autre utilisateur.
IF PERMISSIONS(OBJECT_ID('AdventureWorks2012.Person.Address','U'))&0x80000=0x80000
PRINT 'INSERT on Person.Address is grantable.'
ELSE
PRINT 'You may not GRANT INSERT permissions on Person.Address.';