
GRANT Oracle : Attribuer des Privilèges et Droits SQL
La commande GRANT Oracle est l’instruction SQL fondamentale permettant d’attribuer des privilèges d’accès aux objets de la base de données ou des droits système à des utilisateurs et des rôles. Maîtriser GRANT est indispensable pour tout administrateur ou développeur Oracle souhaitant mettre en place une politique de sécurité robuste et conforme aux exigences de l’entreprise.
Définition et utilisation de GRANT en Oracle
La commande GRANT appartient au sous-langage DCL (Data Control Language) de SQL. Elle permet à un utilisateur disposant des droits suffisants (DBA ou propriétaire d’un objet) de déléguer des permissions à d’autres comptes de la base de données Oracle.
On distingue deux grandes familles de privilèges en Oracle :
- Les privilèges système : ils permettent d’effectuer des actions globales sur la base (créer une table, créer un utilisateur, se connecter, etc.). Exemples :
CREATE SESSION,CREATE TABLE,CREATE USER. - Les privilèges objets : ils portent sur un objet précis de la base (table, vue, séquence, procédure). Exemples :
SELECT,INSERT,UPDATE,DELETE,EXECUTE.
Cas d’usage en entreprise
En environnement professionnel, GRANT est utilisé dans de nombreux contextes :
- Donner à une application web le droit de lire et écrire dans certaines tables sans lui accorder des droits d’administration.
- Permettre à un utilisateur de reporting de consulter des vues sans accéder aux tables sensibles sous-jacentes.
- Déléguer la gestion d’un schéma à un développeur en phase de recette sans lui attribuer de droits DBA.
- Accorder des privilèges à un rôle Oracle, puis affecter ce rôle à plusieurs utilisateurs pour simplifier la gestion.
Syntaxe complète de GRANT Oracle
Syntaxe pour les privilèges objets
GRANT privilege_objet [, privilege_objet...]
ON [schema.]nom_objet
TO {utilisateur | role | PUBLIC}
[WITH GRANT OPTION];
Syntaxe pour les privilèges système
GRANT privilege_systeme [, privilege_systeme...]
TO {utilisateur | role | PUBLIC}
[WITH ADMIN OPTION];
Explication des paramètres essentiels
| Paramètre | Description |
|---|---|
privilege_objet | Droit accordé sur un objet : SELECT, INSERT, UPDATE, DELETE, ALTER, INDEX, REFERENCES, EXECUTE |
privilege_systeme | Droit global sur la base : CREATE SESSION, CREATE TABLE, CREATE VIEW, DROP ANY TABLE… |
ON nom_objet | Désigne la table, vue ou procédure concernée (uniquement pour les privilèges objets) |
TO | Destinataire du privilège : un utilisateur nommé, un rôle, ou PUBLIC (tous les utilisateurs) |
WITH GRANT OPTION | Autorise le bénéficiaire à retransmettre le même privilège objet à d’autres utilisateurs |
WITH ADMIN OPTION | Autorise le bénéficiaire à retransmettre le même privilège système ou rôle à d’autres |
PUBLIC | Accorde le privilège à l’ensemble des utilisateurs de la base de données |
Exemples pratiques de GRANT en Oracle SQL
Exemple 1 — Privilèges sur une table dans un contexte RH
Dans ce premier scénario, une entreprise dispose d’une application de gestion des ressources humaines. L’utilisateur applicatif APP_RH doit pouvoir consulter et modifier la table EMPLOYES appartenant au schéma RH, sans pouvoir supprimer de lignes ni modifier la structure.
-- Accorder les droits de lecture et de modification
-- sur la table EMPLOYES du schéma RH à l'utilisateur APP_RH
GRANT SELECT, INSERT, UPDATE
ON RH.EMPLOYES
TO APP_RH;
-- Vérification des privilèges accordés via le dictionnaire Oracle
SELECT GRANTEE, PRIVILEGE, TABLE_NAME, GRANTABLE
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'EMPLOYES'
AND GRANTEE = 'APP_RH';
Résultat : L’utilisateur APP_RH peut désormais exécuter des requêtes SELECT, INSERT et UPDATE sur RH.EMPLOYES. La colonne GRANTABLE vaut NO car WITH GRANT OPTION n’a pas été précisé : APP_RH ne peut pas retransmettre ces droits.
Exemple 2 — Privilèges système et utilisation d’un rôle
Dans ce deuxième scénario, un nouveau développeur rejoint l’équipe de recette. Plutôt que de lui octroyer des droits individuels, on utilise un rôle Oracle déjà configuré, puis on lui accorde le droit de se connecter à la base.
-- Étape 1 : Créer le rôle de développeur (si ce n'est pas déjà fait)
CREATE ROLE ROLE_DEV;
-- Étape 2 : Accorder des privilèges système au rôle
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SEQUENCE
TO ROLE_DEV;
-- Étape 3 : Attribuer le rôle au nouveau développeur
GRANT ROLE_DEV TO JEAN_DUPONT;
-- Étape 4 : Accorder également les droits de lecture
-- sur la table de référence PRODUITS avec possibilité
-- de retransmettre ce droit à d'autres membres de l'équipe
GRANT SELECT
ON STOCKS.PRODUITS
TO JEAN_DUPONT
WITH GRANT OPTION;
Résultat : JEAN_DUPONT peut se connecter, créer des objets dans son schéma et consulter la table PRODUITS. Grâce à WITH GRANT OPTION, il peut également partager le droit SELECT sur PRODUITS avec ses collègues.
Erreurs courantes avec GRANT Oracle
Erreur ORA-01031 : insufficient privileges
C’est l’erreur la plus fréquemment rencontrée lors de l’utilisation de GRANT. Elle survient lorsque l’utilisateur qui exécute l’instruction ne possède pas lui-même le droit d’accorder ce privilège.
-- Situation : l'utilisateur MARTIN tente d'accorder
-- un privilège sur une table qui ne lui appartient pas
-- et pour laquelle il n'a pas reçu WITH GRANT OPTION
GRANT SELECT ON RH.EMPLOYES TO PIERRE;
-- ORA-01031: insufficient privileges
Solution : Vérifiez que l’utilisateur exécutant le GRANT est bien le propriétaire de l’objet ou qu’il dispose du rôle DBA, ou encore qu’il a reçu le privilège concerné WITH GRANT OPTION. Connectez-vous avec un compte DBA pour effectuer l’opération, ou demandez au propriétaire du schéma de l’exécuter directement.
Conseil : Évitez d’utiliser WITH GRANT OPTION de manière systématique, car cela crée des chaînes de délégation difficiles à auditer et à révoquer proprement avec REVOKE.
Résumé des points clés de GRANT Oracle
| Point clé | Détail |
|---|---|
| Famille SQL | DCL (Data Control Language) |
| Deux types de privilèges | Système (globaux) et Objets (sur un objet précis) |
| Destinataires possibles | Utilisateur, rôle, PUBLIC |
| Délégation objet | WITH GRANT OPTION |
| Délégation système | WITH ADMIN OPTION |
| Révocation | Commande REVOKE |
| Vue dictionnaire objets | DBA_TAB_PRIVS, USER_TAB_PRIVS |
| Vue dictionnaire système | DBA_SYS_PRIVS, SESSION_PRIVS |
Bonnes pratiques Oracle
- Privilégier les rôles plutôt que les attributions directes : accordez les privilèges à des rôles métier (
ROLE_LECTURE,ROLE_ADMIN_APP) puis affectez ces rôles aux utilisateurs. Cette approche facilite l’audit, la révocation et l’évolution des droits sans toucher à chaque compte individuellement. - Appliquer le principe du moindre privilège : n’accordez que les droits strictement nécessaires à chaque utilisateur ou application. Évitez
GRANT ALLouGRANT DBAsauf nécessité absolue, et auditez régulièrement les privilèges accordés via les vuesDBA_TAB_PRIVSetDBA_SYS_PRIVS.
Aller plus loin sur la gestion des droits Oracle
Pour approfondir vos connaissances en matière de sécurité et de gestion des accès dans Oracle SQL, nous vous recommandons les articles suivants :
- REVOKE Oracle : révoquer des privilèges et droits SQL — Apprenez à annuler les droits accordés par GRANT et à gérer les cascades de révocation.
- Les rôles Oracle SQL : créer et gérer des profils de sécurité — Découvrez comment structurer vos politiques d’accès avec CREATE ROLE et les rôles prédéfinis Oracle.
- CREATE USER Oracle : créer et configurer un utilisateur SQL — Maîtrisez la création de comptes utilisateurs Oracle et les paramètres de profil associés.
Sur le même thème
- SAVEPOINT Oracle : Gérer les points de sauvegarde SQL
- FLASHBACK TABLE Oracle : Restaurer une table facilement
- Flashback Query Oracle : Interroger les données passées
- ROLE Oracle SQL : Gérer les droits et privilèges
- RESTORE POINT Oracle : Gérer les Points de Restauration SQL
- DATABASE LINK Oracle : Connexion entre bases de données
