La commande REVOKE supprime des permissions précédemment accordées par GRANT à un utilisateur ou à un rôle. Elle fait partie du sous-langage SQL DCL (Data Control Language). Son effet est immédiat : l’utilisateur perd le droit révoqué dès la prochaine requête exécutée.
Le principe du moindre privilège s’applique en continu avec la révocation des privilèges : les accès temporaires se suppriment dès qu’ils ne sont plus nécessaires. Les audits réguliers permettent d’identifier les permissions obsolètes à révoquer.
Table des matières
Syntaxe de base
La commande REVOKE utilise la même structure que GRANT, en remplaçant TO par FROM. ON désigne l’objet cible (table, vue, schéma). FROM indique l’utilisateur ou le rôle qui perd la permission.
REVOKE privilege
ON schema.table
FROM utilisateur;
Plusieurs permissions peuvent être révoquées en une seule instruction, séparées par des virgules. CASCADE propage la révocation aux utilisateurs ayant reçu les droits par délégation et RESTRICT bloque la révocation si des délégations actives existent.
Révoquer des permissions sur les tables
Les cinq permissions principales sur les tables peuvent être révoquées individuellement ou ensemble. SELECT bloque la lecture des données. INSERT, UPDATE et DELETE retirent respectivement les droits d’ajout, de modification et de suppression de lignes.
Pour révoquer plusieurs permissions en une seule instruction, il suffit de les lister séparées par des virgules.
REVOKE SELECT, INSERT, UPDATE, DELETE
ON gestion.commandes
FROM consultant_externe;
Après cette instruction, consultant_externe ne peut plus lire ni modifier les commandes. Les autres permissions qu’il possède sur d’autres tables restent inchangées.
Révoquer des permissions sur différents objets
Vues
Les vues exposent des données calculées ou filtrées. SELECT est la permission quasi-exclusivement révoquée sur les vues, car les droits d’insertion et de mise à jour y sont rarement accordés.
REVOKE SELECT
ON rapport.ventes_par_region
FROM analyste_externe;
L’analyste ne peut plus consulter les données agrégées, sans que les tables sources soient affectées.
Procédures et fonctions
EXECUTE autorise l’appel d’une procédure stockée ou d’une fonction. Révoquer cette permission bloque l’exécution de la routine sans modifier son code.
REVOKE EXECUTE
ON FUNCTION calcul_marge
FROM assistant_non_autorise;
La procédure reste accessible aux autres utilisateurs qui disposent toujours de la permission EXECUTE.
Révoquer un rôle
Révoquer un rôle retire simultanément toutes les permissions qu’il contient à l’utilisateur concerné. C’est la méthode la plus efficace lors d’un changement de poste ou d’un départ, car une seule instruction suffit. L’utilisateur conserve ses autres rôles et permissions directes non révoqués.
-- Révoquer un rôle entier à un utilisateur
REVOKE role_gestionnaire FROM marie@localhost;
-- Révoquer une permission du rôle lui-même
REVOKE UPDATE ON operations.* FROM role_consultant;
Tous les membres du rôle role_consultant perdent immédiatement le droit de mise à jour sur operations.*.
Gérer la délégation avec CASCADE et RESTRICT
Quand une permission a été transmise via WITH GRANT OPTION, CASCADE propage la révocation à tous les utilisateurs ayant reçu ces droits par délégation. L’instruction RESTRICT bloque la révocation si des délégations actives existent encore, pour éviter une suppression accidentelle.
CASCADE est adapté aux révocations définitives (départ d’un collaborateur) et RESTRICT est utile en audit, pour identifier les dépendances avant de révoquer.
-- Révocation en cascade : supprime aussi les droits délégués par superviseur
REVOKE SELECT ON clients FROM superviseur CASCADE;
-- Révocation bloquée si des délégations actives existent
REVOKE INSERT ON stocks FROM delegue RESTRICT;
Avec RESTRICT, si delegue a transmis ses droits à d’autres utilisateurs, la révocation échoue et retourne une erreur explicite.
Révoquer uniquement la capacité de délégation
La commande REVOKE GRANT OPTION FOR retire uniquement la capacité de transmettre des droits, sans supprimer la permission elle-même. L’utilisateur conserve son accès direct mais ne peut plus déléguer.
REVOKE GRANT OPTION FOR UPDATE ON commandes FROM manager_delegue;
manager_delegue peut toujours modifier les commandes, mais ne peut plus accorder ce droit à d’autres utilisateurs.
Particularités selon les SGBD
MySQL
MySQL identifie les utilisateurs par la combinaison nom@hôte. FLUSH PRIVILEGES force le rechargement immédiat des permissions en mémoire, sans quoi les changements peuvent ne pas s’appliquer avant un redémarrage.
REVOKE DELETE ON boutique.* FROM 'vendeur'@'10.0.0.%';
FLUSH PRIVILEGES;
Sans la réinitialisation des privilèges , la révocation est enregistrée mais peut ne pas être prise en compte immédiatement par le moteur.
PostgreSQL
PostgreSQL permet de révoquer des permissions au niveau d’une colonne individuelle. C’est la seule option pour retirer l’accès à une colonne spécifique sans affecter les autres colonnes de la table.
-- Révoquer l'accès à la colonne prix uniquement
REVOKE UPDATE (prix) ON produits FROM vendeurs_region;
Les vendeurs ne peuvent plus modifier les prix, mais conservent leurs autres droits sur la table produits.
SQL Server
SQL Server ajoute l’instruction DENY pour bloquer explicitement une permission héritée d’un rôle. REVOKE retire une permission accordée, mais DENY la bloque même si un autre rôle l’accorde par ailleurs.
-- Révoquer une permission accordée précédemment
REVOKE INSERT ON Sales.Orders FROM [company\ex-employee];
-- Bloquer SELECT même si un rôle accorde cette permission
DENY SELECT ON Finance.Salaries TO auditor_limited;
DENY a priorité sur GRANT dans SQL Server : un utilisateur bloqué par DENY ne peut pas récupérer la permission via un rôle.
Bonnes pratiques
- Auditer avant de révoquer : lister les permissions actives pour éviter de supprimer accidentellement un accès nécessaire.
-- MySQL : permissions d'un utilisateur
SHOW GRANTS FOR 'marie'@'localhost';
-- Standard SQL : permissions sur les tables
SELECT grantee, table_name, privilege_type
FROM information_schema.table_privileges
WHERE grantee = 'marie';
- Révoquer par rôle plutôt qu’utilisateur par utilisateur : un seul
REVOKEsur le rôle suffit pour tous les membres. - Utiliser CASCADE avec précaution : vérifier d’abord les délégations actives pour éviter de révoquer des accès encore nécessaires.
Cas pratique : départ d’un collaborateur
Lors d’un départ, la procédure standard consiste à révoquer toutes les permissions puis à supprimer le compte utilisateur.
-- Révoquer toutes les permissions
REVOKE ALL PRIVILEGES ON *.* FROM 'collegue_depart'@'%';
-- Supprimer le compte
DROP USER 'collegue_depart'@'localhost';
La suppression du compte via DROP USER garantit qu’aucune connexion résiduelle ne subsiste après la révocation.
Erreurs courantes
Erreur 1 : révoquer sans vérifier les délégations actives
Utiliser REVOKE sans CASCADE sur une permission transmise via WITH GRANT OPTION peut laisser des droits actifs chez les utilisateurs délégués.
-- ❌ Sans CASCADE : les droits délégués restent actifs
REVOKE SELECT ON clients FROM superviseur;
-- ✅ Avec CASCADE : révocation complète de la chaîne
REVOKE SELECT ON clients FROM superviseur CASCADE;
Vérifier les délégations actives avec SHOW GRANTS avant d’exécuter la révocation.
Erreur 2 : oublier FLUSH PRIVILEGES en MySQL
Sans FLUSH PRIVILEGES, la révocation est enregistrée mais peut ne pas s’appliquer immédiatement aux connexions actives.
-- ❌ Sans rechargement
REVOKE DELETE ON boutique.* FROM 'vendeur'@'localhost';
-- ✅ Avec rechargement immédiat
REVOKE DELETE ON boutique.* FROM 'vendeur'@'localhost';
FLUSH PRIVILEGES;
Erreur 3 : confondre REVOKE et DENY dans SQL Server
REVOKE retire une permission accordée. Si l’utilisateur hérite de la même permission via un rôle, il la conserve. DENY est nécessaire pour bloquer définitivement une permission, quelle que soit son origine.
-- ❌ REVOKE insuffisant si la permission est héritée d'un rôle
REVOKE SELECT ON dbo.salaires FROM auditeur;
-- ✅ DENY pour un blocage définitif
DENY SELECT ON dbo.salaires TO auditeur;
Sources: MySql, Postgresql , SQL Server