FirebirdSQL logo
 RôlesLes opérateurs peuvent révoquer des privilèges et des rôles 

L’opérateur GRANT est utilisé pour accorder des privilèges et attribuer des rôles, aux utilisateurs et aux autres objets de la base de données.

GRANT

affectation

Accorder des privilèges ou assigner des rôles.

Disponible en

DSQL

Syntaxe (octroi de privilèges)
GRANT <privileges>
  TO <grantee_list>
  [WITH GRANT OPTION]
  [{GRANTED BY | AS} [USER] grantor]

<privileges> ::=
    <table_privileges> | <execute_privilege>
  | <usage_privilege>  | <ddl_privileges>
  | <db_ddl_privilege>

<table_privileges> ::=
  {ALL [PRIVILEGES] | <table_privilege_list> }
    ON [TABLE] {table_name | view_name}

<table_privilege_list> ::=
  <table_privilege> [, <tableprivilege> ...]

<table_privilege> ::=
    SELECT | DELETE | INSERT
  | UPDATE [(col [, col ...])]
  | REFERENCES [(col [, col ...])]

<execute_privilege> ::= EXECUTE ON {
    PROCEDURE proc_name
  | FUNCTION func_name
  | PACKAGE package_name }

<usage_privilege> ::= USAGE ON {
    EXCEPTION exception_name
  | {GENERATOR | SEQUENCE} sequence_name }

<ddl_privileges> ::=
  {ALL [PRIVILEGES] | <ddl_privilege_list>} <object_type>

<ddl_privilege_list> ::=
  <ddl_privilege> [, <ddl_privilege> ...]

<ddl_privilege> ::= CREATE | ALTER ANY | DROP ANY

<object_type> ::=
    CHARACTER SET | COLLATION | DOMAIN | EXCEPTION
  | FILTER | FUNCTION | GENERATOR | PACKAGE
  | PROCEDURE | ROLE | SEQUENCE | TABLE | VIEW

<db_ddl_privileges> ::=
  {ALL [PRIVILEGES] | <db_ddl_privilege_list>} {DATABASE | SCHEMA}

<db_ddl_privilege_list> ::=
  <db_ddl_privilege> [, <db_ddl_privilege> ...]

<db_ddl_privilege> ::= CREATE | ALTER | DROP

<grantee_list> ::= <grantee> [, <grantee> ...]

<grantee> ::=
    PROCEDURE proc_name  | FUNCTION func_name
  | PACKAGE package_name | TRIGGER trig_name
  | VIEW view_name       | ROLE role_name
  | [USER] username      | GROUP Unix_group
  | PUBLIC
  | <sys_privileges>

<sys_privileges> ::= SYSTEM PRIVILEGE <sys_privileges_list>

<sys_privileges_list> ::= <sys_privilege> [, <sys_privilege> [, <sys_privilege> ...]]
Syntaxe (affectation de rôle)
GRANT <role_granted>
  TO <role_grantee_list>
  [WITH ADMIN OPTION]
  [{GRANTED BY | AS} [USER] grantor]

<role_granted> ::= [DEFAULT] role_name [, [DEFAULT] role_name ...]

<role_grantee_list> ::=
  <role_grantee> [, <role_grantee> ...]

<role_grantee> ::=
    [USER] username
  | [ROLE] grantee_role_name
Table 1. Paramètres de l’opérateur GRANT.
Paramètre Description

table_name

Le nom de la table à laquelle le privilège doit être accordé.

view_name

Le nom de la soumission à laquelle le privilège doit être accordé, ou à laquelle le privilège sera accordé.

col

La colonne de la table à laquelle le privilège doit être appliqué.

proc_name

Nom de la procédure stockée pour laquelle le privilège EXECUTE doit être délivré ou à laquelle le privilège sera accordé.

func_name

Nom de la fonction stockée (ou UDF) qui doit recevoir le privilège EXECUTE ou qui recevra des privilèges.

package_name

Le nom du paquet auquel sera attribué le privilège EXECUTE ou auquel le privilège sera attribué.

exception_name

Le nom de l’exception pour laquelle le privilège USAGE doit être délivré.

generator_name

Le nom du générateur (séquence) pour lequel le privilège USAGE doit être émis.

object_type

Le type d’objet de métadonnées.

object_list

Une liste d’objets de métadonnées qui recevront des privilèges.

trig_name

Le nom du déclencheur auquel le privilège doit être accordé.

user_list

Une liste d’utilisateurs/rôles auxquels des privilèges doivent être accordés.

username

Le nom de l’utilisateur pour lequel des privilèges sont accordés ou auquel un rôle est attribué.

rolename

Nom du rôle.

Unix_group

Nom du groupe d’utilisateurs dans les systèmes d’exploitation de la famille UNIX. Seulement dans Firebird Embedded.

Unix_user

Nom d’utilisateur dans un système d’exploitation de la famille UNIX. Seulement dans Firebird Embedded.

sys_privilege

Privilège du système.

role_granted

Une liste des rôles à attribuer.

role_grantee_list

Une liste d’utilisateurs qui se verront attribuer des rôles.

grantor

Un utilisateur au nom duquel des privilèges sont accordés.

L’instruction GRANT accorde un ou plusieurs privilèges pour des objets de base de données à des utilisateurs, des rôles, des procédures stockées, des fonctions, des packages, des déclencheurs et des vues.

Un utilisateur autorisé ne dispose d’aucun privilège tant que des droits ne lui sont pas explicitement accordés. Lorsqu’un objet est créé, seuls son créateur et SYSDBA disposent de privilèges sur celui-ci et peuvent attribuer des privilèges à d’autres utilisateurs, rôles ou objets.

Il existe un ensemble différent de privilèges pour les différents types d’objets de métadonnées. Ces privilèges seront décrits ci-dessous séparément pour chaque type d’objet de métadonnées.

Clause TO

La clause TO spécifie une liste d’utilisateurs, de rôles et d’objets de base de données (procédures, fonctions, packages, triggers et vues) pour lesquels les privilèges listés seront délivrés. Les clauses facultatives USER et ROLE permettent de spécifier exactement à qui le privilège est délivré. Si le mot-clé USER ou ROLE n’est pas spécifié, le serveur vérifie si un rôle portant ce nom existe ; dans le cas contraire, le privilège est attribué à l’utilisateur. L’existence de l’utilisateur auquel le privilège est attribué n’est pas vérifiée lors de l’exécution de l’instruction GRANT. Si le privilège est attribué à un objet de base de données, le type d’objet doit être spécifié.

Tip
Recommandation

Bien que les mots-clés USER et ROLE soient facultatifs, il est conseillé de les utiliser pour éviter toute confusion.

Exemples d’octroi de privilèges DDL sur une base de données

Example 1. Autoriser l’utilisateur Superuser à créer des bases de données
GRANT CREATE DATABASE TO USER Superuser;
Example 2. Permettre à Joe d’exécuter l’instruction ALTER DATABASE pour la base de données courante.
GRANT ALTER DATABASE TO USER Joe;
Example 3. Autoriser l’utilisateur Fedor à supprimer la base de données actuelle
GRANT DROP DATABASE TO USER Fedor;

Accorder des droits aux privilèges du système

La prise en charge des privilèges système dans le noyau rend très pratique l’octroi de privilèges supplémentaires aux utilisateurs qui disposent déjà de certains privilèges système. À cette fin, il est possible d’utiliser un ou plusieurs privilèges système en tant que bénéficiaire.

Exemples d’octroi de privilèges système

L’instruction suivante attribue tous les privilèges de la vue PLG$SRP_VIEW utilisée dans le plugin de gestion des utilisateurs SRP au privilège système USER_MANAGEMENT.

GRANT ALL ON PLG$SRP_VIEW TO SYSTEM PRIVILEGE USER_MANAGEMENT

Une description des privilèges du système est disponible à l’adresse suivante CREATE ROLE

Attribution des rôles

Syntaxe (Assignation d’un rôles)
GRANT <role_granted>
  TO <role_grantee_list>
  [WITH ADMIN OPTION]
  [{GRANTED BY | AS} [USER] grantor]

<role_granted> ::= [DEFAULT] role_name [, [DEFAULT] role_name ...]

<role_grantee_list> ::=
  <role_grantee> [, <role_grantee> ...]

<role_grantee> ::=
    [USER] username
  | [ROLE] grantee_role_name

L’opérateur GRANT peut être utilisé pour attribuer des rôles à une liste d’utilisateurs ou de rôles, dans ce cas la clause GRANT est suivie d’une liste de rôles à attribuer à la liste d’utilisateurs ou de rôles spécifiée après la clause TO.

Mot clé DEFAULT

Si le mot-clé DEFAULT est utilisé, le(s) rôle(s) sera(ont) utilisé(s) par l’utilisateur ou le rôle à chaque fois, même s’il n’a pas été spécifié explicitement. Lors de la connexion, l’utilisateur recevra les privilèges de tous les rôles qui lui ont été attribués en utilisant le mot-clé DEFAULT. Si l’utilisateur spécifie son rôle lors de la connexion, il recevra les privilèges de ce rôle (s’il lui a été attribué) et les privilèges de tous les rôles qui lui ont été attribués en utilisant le mot-clé DEFAULT.

Clause WITH ADMIN OPTION

La clause facultative WITH ADMIN OPTION permet aux utilisateurs spécifiés dans la liste des utilisateurs de transférer leurs rôles à un autre utilisateur ou à un autre rôle. L’autorité du rôle ne peut être transférée de manière cumulative que si chaque rôle de la séquence de rôles est attribué en utilisant WITH ADMIN OPTION.

Exemples d’attribution de rôles

Example 1. Rôles des utilisateurs
-- Attribution des rôles de DIRECTEUR et de MANAGER à l'utilisateur IVAN
GRANT DIRECTOR, MANAGER TO USER IVAN;

-- Attribution du rôle ADMIN à l'utilisateur ALEX
-- avec la possibilité d'assigner celui-ci à d'autres utilisateurs
GRANT MANAGER TO USER ALEX WITH ADMIN OPTION;
Example 2. affectation des rôles pour les utilisateurs avec le mot-clé DEFAULT.
-- Attribution du rôle de MANAGER à l'utilisateur JOHN
-- Les privilèges du rôle seront automatiquement attribués à l'utilisateur
-- à chaque fois qu'il s'identifiera. Dans ce cas, le rôle agit comme un groupe.
GRANT DEFAULT MANAGER TO USER JOHN;

-- L'utilisateur JOHN se verra désormais accorder automatiquement des privilèges lors de la connexion.
-- MANAGER (voir opérateur précédent) et DIRECTEUR
GRANT DEFAULT DIRECTOR TO USER JOHN;
Example 3. L’affectation de rôles à d’autres rôles
-- Affectation du rôle de MANAGER au rôle de DIRECTEUR
-- avec la possibilité de transférer le rôle de MANAGER à d'autres utilisateurs ou rôles
GRANT MANAGER TO ROLE DIRECTOR WITH ADMIN OPTION;

-- Affectation du rôle de COMPTABLE au rôle de DIRECTEUR
-- lorsque vous vous connectez avec le rôle de DIRECTEUR, l'autorité du rôle de COMPTABLE
-- sera également accordé
GRANT DEFAULT ACCOUNTANT TO ROLE DIRECTOR;

-- L'utilisateur PETROV reçoit automatiquement l'autorité du rôle de DIRECTEUR.
-- Ces pouvoirs comprendront également l'autorité du rôle de l'ACCOUNTANT.
-- Pour obtenir l'autorité pour le rôle de MANAGER
-- vous devez spécifier ce rôle lors de la connexion ou plus tard avec l'opérateur SET ROLE
GRANT DEFAULT ROLE DIRECTOR TO USER PETROV;
Voir aussi :

REVOKE.

Utilisateur PUBLIC

En SQL, il existe un utilisateur spécial PUBLIC qui représente tous les utilisateurs. Si une opération est autorisée à l’utilisateur PUBLIC, alors tout utilisateur authentifié peut effectuer cette opération sur l’objet spécifié.

Important

Si les privilèges sont attribués à l’utilisateur PUBLIC, ils doivent également être retirés à l’utilisateur PUBLIC.

Clause WITH GRANT OPTION

La clause facultative WITH GRANT OPTION permet aux utilisateurs spécifiés dans la liste des utilisateurs d’accorder à d’autres utilisateurs les privilèges spécifiés dans la liste des privilèges.

Clause GRANTED BY

Lorsqu’on accorde des droits dans une base de données, l’utilisateur actuel est généralement enregistré comme la personne qui accorde les droits. En utilisant la clause GRANTED BY, il est possible d’accorder des droits au nom d’un autre utilisateur. L’utilisation de l’instruction REVOKE après GRANTED BY ne supprimera les droits que s’ils ont été enregistrés par l’utilisateur qui les a supprimés. Pour faciliter la migration depuis d’autres SGBD relationnels, l’instruction non standard AS est prise en charge comme synonyme de l’instruction GRANTED BY.

La clause "accordé par" peut être utilisée :

  • Le propriétaire de la base de données ;

  • `SYSDBA' ;

  • Tout utilisateur ayant des droits sur le rôle RDB$ADMIN et l’ayant spécifié lors de la connexion à la base de données ;

  • Lors de l’utilisation du drapeau AUTO ADMIN MAPPING — tout administrateur Windows (tant que le serveur utilise l’authentification de confiance), même sans spécifier un rôle.

Même le propriétaire du rôle ne peut pas utiliser `GRANTED BY' à moins qu’il ne soit dans la liste ci-dessus.

Privilèges table

Contrairement aux autres objets de métadonnées, les tables et les vues peuvent utiliser plusieurs privilèges.

Liste des privilèges pour les tables
SELECT

Permet de sélectionner des données (SELECT) dans une table ou une vue.

INSERT

Permet d’ajouter une entrée (INSERT) dans une table ou une vue.

UPDATE

Permet de modifier les entrées (UPDATE) dans une table ou une vue. Vous pouvez spécifier des restrictions afin que seules les colonnes spécifiées puissent être modifiées.

DELETE

Permet de supprimer des enregistrements (DELETE) d’une table ou d’une vue.

REFERENCES

Doit être spécifié pour les colonnes sur lesquelles la clé primaire d’une table est construite si elle est référencée par la clé externe d’une autre table.

ALL

Combine les privilèges SELECT, INSERT, UPDATE, DELETE et REFERENCES.

Exemples de `GRANT <privilege>' pour les tables

Example 1. Accorder des privilèges aux tables
-- privilèges SELECT, INSERT à l'utilisateur ALEX
GRANT SELECT, INSERT ON TABLE SALES
TO USER ALEX;

-- Privilège SELECT pour les utilisateurs MANAGER, ENGINEER et IVAN
GRANT SELECT ON TABLE CUSTOMER
TO ROLE MANAGER, ROLE ENGINEER, USER IVAN;

-- Tous les privilèges du rôle d'ADMINISTRATEUR
-- avec la possibilité de déléguer leurs pouvoirs
GRANT ALL ON TABLE CUSTOMER
TO ROLE ADMINISTRATOR WITH GRANT OPTION;

-- privilèges SELECT et REFRENCE pour la colonne NOM pour tous les utilisateurs
GRANT SELECT, REFERENCES (NAME) ON TABLE COUNTRY
TO PUBLIC;

-- Accorder le privilège SELECT à l'utilisateur IVAN au nom de l'utilisateur ALEX
GRANT SELECT ON TABLE EMPLOYEE
TO USER IVAN GRANTED BY ALEX;

-- Privilège UPDATE pour les colonnes FIRST_NAME, LAST_NAME
GRANT UPDATE (FIRST_NAME, LAST_NAME) ON TABLE EMPLOYEE
TO USER IVAN;

-- Privilège INSERT pour la procédure stockée ADD_EMP_PROJ
GRANT INSERT ON EMPLOYEE_PROJECT
TO PROCEDURE ADD_EMP_PROJ;

Privilège `EXECUTE'.

Le privilège EXECUTE (exécuter) s’applique aux procédures stockées, aux fonctions stockées, aux packages et aux fonctions externes héritées (UDF) définies comme DECLARE EXTERNAL FUNCTION.

Pour les procédures stockées, le privilège EXECUTE permet non seulement d’exécuter des procédures stockées mais aussi de sélectionner des données dans des procédures sélectives (à l’aide de l’opérateur SELECT).

Note

Ce privilège ne peut être attribué qu’à l’ensemble du paquet, et non à des sous-programmes individuels.

Exemples d’octroi du privilège `EXECUTE'.

Example 1. Accorder le privilège `EXECUTE'.
-- Privilège EXECUTE sur une procédure stockée
GRANT EXECUTE ON PROCEDURE ADD_EMP_PROJ
TO ROLE MANAGER;

-- Privilège EXECUTE sur une fonction stockée
GRANT EXECUTE ON FUNCTION GET_BEGIN_DATE TO ROLE MANAGER;

-- privilège EXECUTE par paquet
GRANT EXECUTE ON PACKAGE APP_VAR TO PUBLIC;

-- privilège EXECUTE sur une fonction donnée à un package
GRANT EXECUTE ON FUNCTION GET_BEGIN_DATE
TO PACKAGE APP_VAR;

Privilège `USAGE'.

Pour utiliser des objets de métadonnées autres que des tables, des vues, des procédures et fonctions stockées, des déclencheurs et des paquets dans des requêtes utilisateur, l’utilisateur doit se voir attribuer le privilège USAGE pour ces objets. Étant donné que les procédures et fonctions stockées, les déclencheurs et les routines de paquets dans Firebird sont exécutés avec des privilèges d’utilisateur appelant, il peut être nécessaire d’attribuer le privilège USAGE à ceux-ci également lors de l’utilisation de tels objets de métadonnées dans ceux-ci.

Note

Dans Firebird 3, le privilège USAGE est vérifié uniquement pour les exceptions (exceptions) et les générateurs/séquences (dans gen_id(gen_name, n) ou next value for gen_name). Des privilèges pour d’autres objets de métadonnées peuvent être inclus dans des versions futures si cela est jugé approprié.

Note

Le privilège USAGE donne uniquement le droit d’incrémenter des générateurs (séquences) en utilisant la fonction GEN_ID ou la construction NEXT VALUE FOR. L’instruction SET GENERATOR est analogue à l’instruction ALTER SEQUENCE …​ RESTART WITH, qui sont des opérateurs DDL. Par défaut, seul le propriétaire du générateur (séquence) a les droits pour de telles opérations. Le droit de définir la valeur initiale de tout générateur (séquence) peut être accordé par GRANT ALTER ANY SEQUENCE, ce qui n’est pas recommandé pour les utilisateurs normaux.

Exemples d’octroi du privilège `USAGE'.

Example 1. Accorder le privilège "USAGE".
-- privilège USAGE sur la cohérence du rôle délivré
GRANT USAGE ON SEQUENCE GEN_AGE TO ROLE MANAGER;

-- privilège USAGE sur la séquence émise au déclencheur
GRANT USAGE ON SEQUENCE GEN_AGE TO TRIGGER TR_AGE_BI;

-- privilège d'exemption USAGE accordé à un paquet
GRANT USAGE ON EXCEPTION E_ACCESS_DENIED
TO PACKAGE PKG_BILL;

Privilèges DDL

Par défaut, seuls les Administrateurs peuvent créer de nouveaux objets de métadonnées, et les administrateurs et propriétaires de ces objets peuvent les modifier et les supprimer. L’octroi de privilèges pour créer, modifier ou supprimer des objets d’un type particulier permet d’étendre cette liste.

Liste des privilèges DDL
CREATE

Permet la création d’un objet du type de métadonnées spécifié.

ALTER ANY

Permet de modifier tout objet du type de métadonnées spécifié.

DROP ANY

Permet de supprimer tout objet du type de métadonnées spécifié.

ALL

Combine les privilèges CREATE, ALTER et DROP sur le type d’objet spécifié.

Note

Les métadonnées des déclencheurs et des index héritent des privilèges des tables qui les possèdent.

Exemples de fourniture de privilèges DDL

Example 1. Accorder des privilèges pour modifier les métadonnées
-- Autoriser l'utilisateur Joe à créer des tables
GRANT CREATE TABLE TO Joe;

-- Permettre à l'utilisateur Joe de modifier toutes les procédures
GRANT ALTER ANY PROCEDURE TO Joe;

Privilèges DDL pour la base de données

L’instruction d’attribution de privilèges pour la création, la suppression et la modification d’une base de données a une forme légèrement différente de l’instruction d’attribution de privilèges DDL pour les autres objets de métadonnées.

Liste des privilèges DDL par base de données
CREATE

Permet la création d’une base de données.

ALTER

Permet de modifier la base de données actuelle.

DROP

Permet de supprimer la base de données actuelle.

ALL

Combine les privilèges ALTER et DROP par base de données.

Le privilège CREATE DATABASE est un type de privilège spécial car il est stocké dans la base de données de sécurité. La liste des utilisateurs disposant du privilège CREATE DATABASE peut être consultée dans la table virtuelle SEC$DB_CREATORS. Seuls les Administrateurs de la base de données de sécurité peuvent accorder le privilège de créer une nouvelle base de données.

Les privilèges ALTER DATABASE et DROP DATABASE s’appliquent uniquement à la base de données actuelle, tandis que les privilèges DDL ALTER ANY et DROP ANY sur d’autres objets de métadonnées s’appliquent à tous les objets du type spécifié dans la base de données actuelle. Seuls les Administrateurs peuvent accorder des privilèges pour modifier et supprimer la base de données actuelle.