FirebirdSQL logo

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.

docnext count = 8

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.