GRANT

Nom

GRANT — accorde les privilèges d'accés à un utilisateur, un groupe ou tous les utilisateurs.
GRANT privilege [, ...] ON object [, ...]
    TO { PUBLIC | GROUP group | username }
  

Entrées

privilege

les privilèges possibles sont :

SELECT

accés à toutes les colonnes d'une table/vue spécifiée

INSERT

insertion de données dans toutes les colonnes d'une table spécifiée

UPDATE

met à jour toutes les colonnes d'une table spécifiée

DELETE

supprime les lignes d'une table spécifiée

RULE

définit les règles d'une table/vue (voir la clause CREATE RULE)

ALL

accorde tous les privilèges

object

nom d'un objet pour lequel accorder l'accés. Les objets possibles sont :

  • table

  • view

  • sequence

  • index

PUBLIC

forme courte représentant tous les utilisateurs

GROUP group

Un group auquel accorder les privilèges. Dans cette version, le groupe doit être créé explicitement comme décrit plus bas.

username

nom d'un utilisateur auquel accorder les privilèges. PUBLIC est une forme courte représentant tous les utilisateurs.

Sorties

CHANGE

message retourné si la commande s'est effectuée correctement.

ERROR: ChangeAcl: class "object" not found

si l'objet spécifié n'est pas disponible ou si il est impossible de donner les privilèges au groupe spécifié ou aux utilisateurs.

Description

GRANT permet au créateur d'un objet de donner des permissions spécifiques à tous les utilisateurs (PUBLIC) ou à un certain utilisateur ou groupe. Les utilisateurs autre que le créateur n'ont aucune permission d'accés à moins que le créateur accorde (GRANT) les permissions, ensuite l'objet est créé.

Une fois qu'un utilisateur a les privilèges sur un objet, il peut exercer ces privilèges. Il n'y a pas besoin d'accorder les privilèges au créateur d'un objet, le créateur détient automatiquement tous (ALL) les privilèges, et peut aussi supprimer l'objet.

Notes

De façon habituelle, pour accorder des privilèges dans Postgres à quelques colonnes seulement, vous devez créer une vue contenant les colonnes désirées et ensuite accorder les privilèges à cette vue.

Utilisez psql \z pour plus d'information sur les permissions concernant les objets existants.
	  Database    = lusitania
   +------------------+---------------------------------------------+
   |  Relation        |        Grant/Revoke Permissions             |
   +------------------+---------------------------------------------+
   | mytable          | {"=rw","miriam=arwR","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
                  w -- UPDATE/DELETE
                  a -- INSERT
                  R -- RULE
               arwR -- ALL
    

Tuyau

pour créer un groupe vous inserez manuellement les données dans la table pg_group comme :
INSERT INTO pg_group VALUES ('todos');
CREATE USER miriam IN GROUP todos;
      

Voir la commande REVOKE pour supprimer les privilièges d'accès.

Utilisation

Accorde les privilèges à tous les utilisateurs de la table films :
GRANT INSERT ON films TO PUBLIC;
   

Accorde tous les privilèges à l'utilisateur manuel sur la vue kinds :
GRANT ALL ON kinds TO manuel;
   

Compatibilité

SQL92

La syntaxe SQL92 pour GRANT admet le placement des privilèges pour les colonnes individuelles dans une table, et admet lors du placement d'un privilège, les mêmes privilèges aux autres.
GRANT privilege [, ...]
    ON object [ ( column [, ...] ) ] [, ...]
    TO { PUBLIC | username [, ...] } [ WITH GRANT OPTION ]
    

Les champs sont compatibles avec ceux de l'implémentation Postgres, avec les additions suivantes :

privilege

SQL92 permet des privilèges supplémentaires :

SELECT

REFERENCES

admet de référencer certaines colonnes d'une table/vue spécifique dans les contraintes d'intégrité.

USAGE

permet d'utiliser un domaine, placer un caractère, collation ou translation. Si un objet spécifie quelque chose d'autre qu'une table/vue, privilege doit spécifier seulement USAGE.

object

[ TABLE ] table

SQL92 permet un mot-clé non-fonctionnel supplémentaire : TABLE.

CHARACTER SET

permet d'utiliser le character set spécifié.

COLLATION

permet d'utiliser la séquence collation spécifiée.

TRANSLATION

permet d'utiliser le character set translation.

DOMAIN

permet d'utiliser le domaine spécifié.

WITH GRANT OPTION

permet d'accorder les mêmes privilèges aux autres.