GRANT

Name

GRANT -- definit les droits d'accès

Synopsis

GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER } [,...] | ALL [ PRIVILEGES ] }
    ON [ TABLE ] objectname [, ...]
    TO { username | GROUP groupname | PUBLIC } [, ...]

Description

La commande GRANT donne des droits spécifiques sur un objet (table, vue, séquence) pour un ou plusieurs utilisateurs ou groupes d'utilisateurs. Ces permissions sont ajoutées à celles déja accordées, si nécessaire.

Le mot-clé PUBLIC insique que les droits sont accordés à tous les utilisateurs, incluent ceux qui peuvent être créés plus tard. PUBLIC peut être vu comme un groupe définit implicitement qui inclut toujours tous les utilisateurs. Notez qu'un utilisateur peut avoir le total des droits accordés, comme utilisateur directement, comme membre d'un groupe, et par les droits accordés par PUBLIC.

Les utilisateurs autres que le créateur d'un objet n'ont pas les droits d'accès à cet objet à moins que le créateur leur accorde les permissions. Il n'est pas nécessaire d'accorder les droits au créateur d'un objet, le créateur les obtient tous automatiquement. (Le créateur, peut cependant, choisir de réduire certains de ses propres droits par sécurité. Notez que la possibilité d'accorder ou de réduire les droits est inhérente au créateur et ne peut être perdue. Le droit de supprimer un objet est tout à fait inhérent au créateur, et ne peut être accordée ou révoquée).

les privilèges possibles sont :

SELECT

Permet le SELECT depuis une colonne d'une table spécifiée, une vue, ou une séquence. Permet aussi l'utilisation de COPY FROM.

INSERT

Permet le INSERT d'une nouvelle ligne dans la table spécifiée. Permet aussi COPY TO.

UPDATE

Permet le UPDATE d'une colonne d'une table spécifiée. SELECT ... FOR UPDATE nécessite aussi ce privilège (en plus du droit SELECT). Pour les séquences, ce droit permet l'utilisation de nextval, currval et setval.

DELETE

Permet le DELETE d'une ligne d'une table spécifiée.

RULE

Permet la création d'une règle sur une table/vue. (Voir l'instruction CREATE RULE).

REFERENCES

Pour créer une table avec une contrainte de clé-étrangère, il est nécessaire d'avoir ce droit sur la table avec la clé référencée.

TRIGGER

Permet la création d'un déclencheur sur la table spécifiée. (Voir l'instruction CREATE TRIGGER).

ALL PRIVILEGES

Accorde tous les droits précédents en une seule fois. Le mot-clé PRIVILEGES est optionnel dans PostgreSQL, bien qu'il soit nécessaire en SQL strict.

Les droits nécessaires pour les autres commandes sont indiqués dans la page de référence des commandes respectives.

Notes

Il peut être noté que les superutilisateurs de la base peuvent accéder à tous les objets sans se soucier des droits relatifs à ces objets. C'est comparable aux droits de root sur un système Unix. Comme avec root, il est imprudent d'opérer en superutilisateur sauf en cas d'absolue nécessité.

De façon courante, pour accorder des droits dans PostgreSQL pour quelques colonnes seulement, vous devez créer une vue ayant les colonnes désirées et ensuite accorder les droits à cette vue.

Utilisez la commande \z de psql(1) pour obtenir l'information sur les droits des objets existants :

          Database    = lusitania
   +------------------+---------------------------------------------+
   |  Relation        |        Grant/Revoke Permissions             |
   +------------------+---------------------------------------------+
   | mytable          | {"=rw","miriam=arwdRxt","group todos=rw"}   |
   +------------------+---------------------------------------------+
   Legend:
         uname=arwR -- privileges granted to a user
   group gname=arwR -- privileges granted to a group
              =arwR -- privileges granted to PUBLIC

                  r -- SELECT ("read")
                  w -- UPDATE ("write")
                  a -- INSERT ("append")
                  d -- DELETE
                  R -- RULE
                  x -- REFERENCES
                  t -- TRIGGER
            arwdRxt -- ALL PRIVILEGES

La commande REVOKE est utilisée pour supprimer les droits d'accès.

Exemples

Accorde les droits d'insertion à tous les utilisateurs de la table films :

GRANT INSERT ON films TO PUBLIC;

Accorde tous les droits à l'utilisateur manuel sur la vue kinds:

GRANT ALL PRIVILEGES ON kinds TO manuel;

Compatibilité

SQL92

Le mot-clé PRIVILEGES dans ALL PRIVILEGES est requis. SQL ne supporte pas le placmenet des droits sur plus d'une table par commande.

La syntaxe SQL92 pour GRANT permet de placer des droits pour des colonnes individuelles dans une table, et permet de placer le privilège d'accorder les mêmes droits aux autres :

GRANT privilege [, ...]
    ON object [ ( column [, ...] ) ] [, ...]
    TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]

SQL permet d'accorder le droit USAGE à d'autres sortes d'objets : CHARACTER SET, COLLATION, TRANSLATION, DOMAIN.

Le droit TRIGGER privilege a été introduit dans le SQL99. Le droit RULE est une extension de PostgreSQL.

Voir aussi

REVOKE