Quand un objet est créé, il se voit affecter un propriétaire. Le propriétaire est normalement le rôle qui a exécuté la requête de création. Pour la plupart des objets, l'état initial est que seul le propriétaire (et les superutilisateurs) peut faire quelque chose avec cet objet. Pour permettre aux autres rôles de l'utiliser, des droits doivent être donnés.
Il existe un certain nombre de droits différents : SELECT
,
INSERT
, UPDATE
, DELETE
,
TRUNCATE
, REFERENCES
, TRIGGER
,
CREATE
, CONNECT
, TEMPORARY
,
EXECUTE
et USAGE
.
Les droits applicables à un objet particulier varient
selon le type d'objet (table, fonction...). La page de référence
GRANT fournit une
information complète sur les différents types de droits gérés par
PostgreSQL. La section et
les chapitres suivants présentent l'utilisation de ces droits.
Le droit de modifier ou de détruire un objet est le privilège du seul propriétaire.
Un objet peut se voir affecter un nouveau propriétaire avec la commande
ALTER
correspondant à l'objet, par exemple ALTER TABLE. Les superutilisateurs peuvent toujours le
faire. Les rôles ordinaires peuvent seulement le faire s'ils sont le
propriétaire actuel de l'objet (ou un membre du rôle propriétaire) et un
membre du nouveau rôle propriétaire.
La commande GRANT
est
utilisée pour accorder des privilèges.
Par exemple, si joe
est un rôle et comptes
une table, le
privilège d'actualiser la table comptes
peut être accordé
à joe
avec :
GRANT UPDATE ON comptes TO joe;
Écrire ALL
à la place d'un droit spécifique accorde tous
les droits applicables à ce type d'objet.
Le nom de « rôle » spécial PUBLIC
peut
être utilisé pour donner un privilège à tous les rôles du système. De plus,
les rôles de type « group » peuvent être configurés pour aider à
la gestion des droits quand il y a beaucoup d'utilisateurs dans une base
-- pour les détails, voir Chapitre 21.
Pour révoquer un privilège, on utilise la commande bien nommée
REVOKE
, comme dans l'exemple ci-dessous :
REVOKE ALL ON comptes FROM PUBLIC;
Les privilèges spéciaux du propriétaire de l'objet (c'est-à-dire le droit
d'exécuter DROP
, GRANT
,
REVOKE
, etc.) appartiennent toujours implicitement au
propriétaire. Ils ne peuvent être ni
accordés ni révoqués. Mais le propriétaire de l'objet peut choisir
de révoquer ses propres droits ordinaires pour, par exemple, mettre
une table en lecture seule pour lui-même et pour les autres.
Habituellement, seul le propriétaire de l'objet (ou un superutilisateur) peut accorder ou révoquer les droits sur un objet. Néanmoins, il est possible de donner un privilège « avec possibilité de transmission » (« with grant option »), qui donne à celui qui le reçoit la permission de le donner à d'autres. Si cette option est ensuite révoquée, alors tous ceux qui ont reçu ce privilège par cet utilisateur (directement ou indirectement via la chaîne des dons) perdent ce privilège. Pour les détails, voir les pages de références GRANT et REVOKE.