REVOKE
REVOKE — supprime les droits d'accès
Synopsis
REVOKE [ GRANT OPTION FOR ]
{ { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] nom_table [, ...]
FROM { nom_utilisateur | GROUP nom_groupe | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { USAGE | SELECT | UPDATE }
[,...] | ALL [ PRIVILEGES ] }
ON SEQUENCE nom_séquence [, ...]
FROM { nom_utilisateur | GROUP nom_groupe | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | CONNECT | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE nom_base [, ...]
FROM { nom_utilisateur | GROUP nom_groupe | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION nomfonction ( [ [ modearg ] [ nomarg ] typearg [, ...] ] ) [, ...]
FROM { nom_utilisateur | GROUP nom_groupe | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE nom_langage [, ...]
FROM { nom_utilisateur | GROUP nom_groupe | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA nom_schéma [, ...]
FROM { nom_utilisateur | GROUP nom_groupe | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ GRANT OPTION FOR ]
{ CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE nom_espacelogique [, ...]
FROM { nom_utilisateur | GROUP nom_groupe | PUBLIC } [, ...]
[ CASCADE | RESTRICT ]
REVOKE [ ADMIN OPTION FOR ]
role [, ...] FROM nom_utilisateur [, ...]
[ CASCADE | RESTRICT ]
Description
La commande
REVOKE
retire des droits précédemment attribués à un ou plusieurs rôles.
Le mot clé PUBLIC fait référence au groupe
implicitement défini de tous les rôles.
Voir la description de la commande GRANT pour connaître la
signification des types de droits.
Notez qu'un rôle possède la somme des droits qui lui ont été donnés
directement, des droits qui ont été donnés à un rôle dont il est
membre et des droits donnés à PUBLIC. Du
coup, par exemple, retirer les droits de SELECT à PUBLIC ne veut pas
nécessairement dire que plus aucun rôle n'a le droit de faire de
SELECT sur l'objet : ceux qui en avaient
obtenu le droit directement ou via un autre rôle l'ont toujours.
Si GRANT OPTION FOR est précisé, seul
l'option de transmission de droit (grant option) est supprimée, pas
le droit lui même. Sinon, le droit et l'option de transmission de
droits sont révoqués.
Si un utilisateur détient un privilège avec le droit de le
transmettre, et qu'il l'a transmis à d'autres utilisateurs, alors
les droits de ceux-ci sont appelés des droits dépendants. Si les
droits ou le droit de transmettre du premier utilisateur sont
supprimés, et que des droits dépendants existent, alors ces droits
dépendants sont aussi supprimés si l'option CASCADE est utilisée, sinon la suppression de droits
est refusée. Cette révocation récursive n'affecte que les droits
qui avaient été attribués à travers une chaîne d'utilisateurs
traçable jusqu'à l'utilisateur qui subit la commande REVOKE. Du coup, les utilisateurs affectés peuvent
finalement garder le droit s'il avait aussi été attribué via
d'autres utilisateurs.
Lors de la révocation de l'appartenance d'un rôle, GRANT OPTION est appelé ADMIN
OPTION mais le comportement est similaire. Notez aussi que
cette forme de la commande ne permet pas le mot GROUP.
Notes
Utilisez la commande
\z
de
psql(1) pour
afficher les droits donnés sur des objets existants. Voir GRANT pour des
informations sur le format.
Un utilisateur ne peut révoquer que les droits qu'il a donnés
directement. Si, par exemple, un utilisateur A a donné un droit et
la possibilité de le transmettre à un utilisateur B, et que B à son
tour l'a donné à C, alors A ne peut pas retirer directement le
droit de C. À la place, il peut supprimer le droit de transmettre à
B et utiliser l'option CASCADE pour que le
droit soit automatiquement supprimé à C. Autre exemple, si A et B
ont donné le même droit à C, A peut révoquer son propre don de
droit mais pas celui de B, donc C dispose toujours de ce droit.
Lorsqu'un utilisateur, non propriétaire de l'objet, essaie de
révoquer (
REVOKE
) des
droits sur l'objet, la commande échoue si l'utilisateur n'a aucun
droit sur l'objet. Tant que certains droits sont disponibles, la
commande s'exécute mais ne sont supprimés que les droits dont
l'utilisateur a l'option de transmission. La forme
REVOKE ALL PRIVILEGES
affiche un
message d'avertissement si les options de transmissions pour un des
droits nommés spécifiquement dans la commande ne sont pas possédés.
(En principe, ces instructions s'appliquent aussi au propriétaire
de l'objet mais comme le propriétaire est toujours traité comme
celui détenant toutes les options de transmission, ces cas
n'arrivent jamais.)
Si un superutilisateur choisit d'exécuter une commande
GRANT
ou
REVOKE
, la commande est exécutée
comme si elle était lancée par le propriétaire de l'objet affecté.
Comme tous les droits proviennent du propriétaire d'un objet
(directement ou via une chaîne de transmissions de droits), un
superutilisateur peut supprimer tous les droits sur un objet mais
cela peut nécessiter l'utilisation de CASCADE comme expliqué précédemment.
REVOKE
peut aussi
être effectué par un rôle qui n'est pas le propriétaire de l'objet
affecté mais qui est un membre du rôle qui possède l'objet ou qui
est un membre d'un rôle qui détient les droits WITH GRANT OPTION sur cet objet. Dans ce cas, la
commande est exécutée comme si elle avait été exécutée par le rôle
qui possède réellement l'objet ou détient les droits WITH GRANT OPTION. Par exemple, si la table
t1 est possédée par le rôle g1, dont le rôle u1 est
membre, alors u1 peut supprimer des droits
sur t1 qui sont enregistrés comme donnés
par g1. Ceci incluera les dons de droits
effectués par u1 ainsi que ceux effectués
par les autres membres du rôle g1.
Si le rôle exécutant
REVOKE
détient les droits
indirectement via plus d'un chemin d'appartenance, le rôle indiqué
comme ayant effectué la commande est non déterminable à l'avance.
Dans de tels cas, il est préférable d'utiliser
SET ROLE
pour devenir le rôle que
vous souhaitez voir exécuter la commande
REVOKE
. Ne pas faire cela peut
avoir comme résultat de supprimer des droits autres que ceux que
vous vouliez, voire même de ne rien supprimer du tout.
Exemples
Enlève au groupe public le droit d'insérer des lignes dans la table
films :
REVOKE INSERT ON films FROM PUBLIC;
Supprime tous les droits de l'utilisateur manuel sur la vue genres :
REVOKE ALL PRIVILEGES ON genres FROM manuel;
Notez que ceci signifie en fait « révoque
tous les droits que j'ai donné ».
Supprime l'appartenance de l'utilisateur joe au rôle admins :
REVOKE admins FROM joe;
Compatibilité
La note de compatibilité de la commande GRANT s'applique par analogie à
REVOKE
. Le résumé de
la syntaxe est :
REVOKE [ GRANT OPTION FOR ] privileges
ON objet [ ( colonne [, ...] ) ]
FROM { PUBLIC | nom_utilisateur
[, ...] }
{ RESTRICT | CASCADE }
Le standard nécessite qu'une des options RESTRICT ou CASCADE soit
indiquée, mais PostgreSQL™
utilise RESTRICT par défaut.