PERMISSIONS (Transact-SQL)

Retourne une valeur contenant un fichier bitmap qui indique l'instruction, l'objet ou les autorisations 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 (Transact-SQL). L'utilisation continue de la fonction PERMISSIONS peut entraîner une baisse des performances.

Icône Lien de rubriqueConventions de la syntaxe de 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.

Type des valeurs renvoyées

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 la liste des 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 AdventureWorks.

IF PERMISSIONS(OBJECT_ID('AdventureWorks.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 AdventureWorks à un autre utilisateur.

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