REVOKE Oracle : Révoquer les privilèges SQL facilement

Apprenez à utiliser REVOKE en Oracle SQL pour retirer des privilèges ou des rôles à un utilisateur. Syntaxe, exemples pratiques et erreurs courantes.

Illustration du tutoriel SQL Oracle : REVOKE Oracle : Révoquer les privilèges SQL facilement

REVOKE Oracle : Comment révoquer des privilèges SQL en toute sécurité

La commande REVOKE en Oracle SQL est un élément fondamental de la gestion de la sécurité en base de données. Elle permet de retirer des privilèges système ou des privilèges objet précédemment accordés à un utilisateur ou à un rôle. Maîtriser REVOKE est indispensable pour tout administrateur de base de données Oracle souhaitant appliquer le principe du moindre privilège et maintenir une sécurité rigoureuse dans son environnement.

Publicité

Définition et utilisation de REVOKE

La commande REVOKE appartient au sous-langage DCL (Data Control Language) d’Oracle SQL, au même titre que GRANT. Son rôle est de supprimer un droit d’accès qui avait été accordé via un GRANT antérieur, que ce soit à un utilisateur spécifique ou à un rôle.

En entreprise, les cas d’usage sont nombreux :

  • Départ d’un collaborateur : révoquer immédiatement tous ses accès aux tables sensibles (données RH, financières, clients).
  • Changement de poste : un utilisateur mute d’un service à un autre et ne doit plus accéder aux données de son ancien périmètre.
  • Audit de sécurité : après un audit, certains privilèges jugés trop larges sont retirés pour respecter le principe du moindre privilège.
  • Gestion de rôles applicatifs : un rôle applicatif évolue et certains accès doivent être restreints sans impacter d’autres utilisateurs.

Oracle distingue deux grandes catégories de révocation :

  • Privilèges système (ex. : CREATE SESSION, CREATE TABLE) : droits permettant d’effectuer des opérations globales dans la base.
  • Privilèges objet (ex. : SELECT, INSERT, UPDATE sur une table) : droits liés à un objet précis du schéma.

Syntaxe complète de REVOKE en Oracle

La syntaxe de REVOKE diffère légèrement selon qu’il s’agit d’un privilège objet ou d’un privilège système.

Révoquer un privilège objet

REVOKE privilege_objet [, privilege_objet ...]
ON [schema.]nom_objet
FROM { utilisateur | rôle | PUBLIC } [, ...]
[CASCADE CONSTRAINTS];

Révoquer un privilège système ou un rôle

REVOKE { privilege_systeme | nom_role } [, ...]
FROM { utilisateur | rôle | PUBLIC } [, ...];

Explication des paramètres essentiels

ParamètreDescription
privilege_objetLe droit à révoquer : SELECT, INSERT, UPDATE, DELETE, EXECUTE, etc.
ON [schema.]nom_objetL’objet concerné (table, vue, procédure…). Le schéma est optionnel si l’objet appartient à l’utilisateur courant.
FROMDésigne l’utilisateur, le rôle ou PUBLIC (tous les utilisateurs) à qui le privilège est retiré.
CASCADE CONSTRAINTSOption utilisée pour supprimer les contraintes d’intégrité référentielle qui dépendent du privilège révoqué.
PUBLICPermet de révoquer un droit accordé à l’ensemble des utilisateurs de la base.

Important : En Oracle, il n’existe pas d’option CASCADE générale pour la révocation de privilèges objet (contrairement à certains autres SGBD). Si un utilisateur A a accordé un privilège à B avec GRANT OPTION, et que B l’a transmis à C, la révocation du privilège de B par A révoque automatiquement celui de C également (effet en cascade implicite).

Exemples pratiques de REVOKE

Exemple 1 – Révoquer des privilèges objet à un utilisateur

Contexte métier : L’entreprise dispose d’une table CLIENTS dans le schéma VENTES. L’utilisateur JEAN_MARTIN, analyste commercial récemment muté, ne doit plus pouvoir insérer ou modifier des données clients.

-- Révocation des droits INSERT et UPDATE sur la table CLIENTS
-- pour l'utilisateur JEAN_MARTIN
REVOKE INSERT, UPDATE
ON VENTES.CLIENTS
FROM JEAN_MARTIN;

-- Vérification : JEAN_MARTIN conserve uniquement SELECT
-- si ce droit lui avait été accordé séparément

Après exécution de cette commande, JEAN_MARTIN ne pourra plus insérer ou modifier de lignes dans la table VENTES.CLIENTS. Si la tentative est faite, Oracle retournera une erreur ORA-01031: insufficient privileges.

Exemple 2 – Révoquer un rôle et un privilège système

Contexte métier : Suite à l’audit annuel de sécurité, l’administrateur souhaite retirer le rôle DBA_JUNIOR et le privilège système CREATE ANY TABLE à l’utilisateur SOPHIE_DUPONT, dont les responsabilités ont évolué.

-- Révocation du rôle DBA_JUNIOR attribué à SOPHIE_DUPONT
REVOKE DBA_JUNIOR
FROM SOPHIE_DUPONT;

-- Révocation du privilège système CREATE ANY TABLE
REVOKE CREATE ANY TABLE
FROM SOPHIE_DUPONT;

-- Bonne pratique : auditer les droits restants après révocation
SELECT GRANTED_ROLE
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'SOPHIE_DUPONT';

SELECT PRIVILEGE
FROM DBA_SYS_PRIVS
WHERE GRANTEE = 'SOPHIE_DUPONT';

Les vues DBA_ROLE_PRIVS et DBA_SYS_PRIVS sont des outils précieux pour contrôler les accès après toute opération de révocation.

Publicité

Erreurs courantes avec REVOKE

Erreur : ORA-01927 – Cannot REVOKE privileges you did not grant

Description : Cette erreur survient fréquemment lorsqu’un utilisateur tente de révoquer un privilège qu’il n’a pas lui-même accordé. En Oracle, seul le grantor original (celui qui a exécuté le GRANT) ou un utilisateur disposant du privilège ADMIN OPTION / GRANT OPTION peut révoquer ce droit.

-- Situation problématique :
-- L'utilisateur DBA_USER2 tente de révoquer un SELECT accordé par DBA_USER1
REVOKE SELECT ON VENTES.COMMANDES FROM LECTEUR_APP;
-- Résultat : ORA-01927: cannot REVOKE privileges you did not grant

Solution : Connectez-vous avec le compte qui a initialement exécuté le GRANT, ou utilisez un compte DBA disposant du privilège ADMIN OPTION. Vous pouvez identifier le grantor via la vue DBA_TAB_PRIVS :

-- Identifier qui a accordé le privilège SELECT sur COMMANDES
SELECT GRANTEE, GRANTOR, PRIVILEGE, GRANT_OPTION
FROM DBA_TAB_PRIVS
WHERE TABLE_NAME = 'COMMANDES'
AND OWNER = 'VENTES';

Résumé

Point cléDétail
Catégorie SQLDCL (Data Control Language)
Rôle principalRetirer des privilèges système ou objet à un utilisateur/rôle
Privilèges objet courantsSELECT, INSERT, UPDATE, DELETE, EXECUTE, REFERENCES
Privilèges système courantsCREATE SESSION, CREATE TABLE, CREATE ANY TABLE, DROP ANY TABLE
Cascade impliciteSi B a reçu un droit avec GRANT OPTION et l’a transmis à C, révoquer B révoque C automatiquement
Erreur fréquenteORA-01927 : révocation par un utilisateur qui n’est pas le grantor
Vues utilesDBA_TAB_PRIVS, DBA_SYS_PRIVS, DBA_ROLE_PRIVS

2 bonnes pratiques Oracle

  1. Auditez systématiquement après une révocation : utilisez les vues DBA_TAB_PRIVS, DBA_SYS_PRIVS et DBA_ROLE_PRIVS pour vérifier que la révocation a bien eu l’effet escompté et qu’aucun droit résiduel ne subsiste via un rôle intermédiaire.
  2. Privilégiez la gestion par rôles : plutôt que d’accorder des privilèges directement à des utilisateurs, regroupez-les dans des rôles. Ainsi, un simple REVOKE role FROM user suffit à retirer un ensemble cohérent de droits, sans risque d’oubli.

Aller plus loin

Pour approfondir votre maîtrise de la sécurité et de la gestion des accès en Oracle SQL, découvrez ces sujets complémentaires :

Sur le même thème

Publicité

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Publicité