2017-09-08 4 views
0

J'ai une base de données Postgres sans tables. La base de données appartient à un utilisateur.Comment accorder certains privilèges sur une base de données à un utilisateur?

Quand je rentre psql puis \dt dans la ligne de commande, voici ce que je reçois:

Name | Owner | Encoding | Collate | Ctype | Access privileges 
-----------+-------------+----------+-------------+-------------+----------------------- 
somedb | someuser | UTF8  | en_US.UTF-8 | en_US.UTF-8 | 

Je veux donner someuser le pouvoir de sélectionner, insérer, mettre à jour, supprimer, tronquer et créer des tableaux sur somedb. Quand je lance GRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES ON DATABASE somedb TO someuser; dans la ligne de commande, je reçois cette erreur:

LINE 1: GRANT CREATE SELECT INSERT UPDATE DELETE TRUNCATE PRIVILEGES... 

Que dois-je changer pour accorder ces privilèges aux someuser?

Répondre

1

tables ne sont pas créés dans "une base de données" - que dans un schéma.

Si vous voulez que l'utilisateur de créer des tables que dans un schéma spécifique, vous devez accorder l'utilisation de ce schéma:

grant usage, create on schema public to someuser; 

Vous n'avez pas besoin d'accorder des privilèges pour les tables pas encore créé de cet utilisateur . L'utilisateur qui crée une table est le propriétaire de cette table. Le propriétaire d'une table peut tout faire avec. Il n'est pas nécessaire d'accorder au propriétaire des privilèges supplémentaires.

Si vous voulez permettre à l'utilisateur de créer de nouveaux schémas, vous devez accorder le privilège create sur la base de données:

grant create on database somedb to someuser; 

Si vous voulez permettre à l'utilisateur de sélectionner l'un existant table dans un schéma, vous devez accorder explicitement que:

grant select,insert,update,delete on all tables in schema public to someuser; 

Si vous voulez que cet utilisateur soit également en mesure de le faire pour de nouvelles tables qui ne sont pas créés par que utilisateur, vous devez modifier les privilèges par défaut:

alter default privileges 
    in schema public 
    grant select,insert,update,delete on tables 
    to someuser; 
1

Vous devez ajouter une virgule entre chaque privilèges:

GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } 
    ON DATABASE nombase [, ...] 
    TO { nomutilisateur | GROUP nomgroupe | PUBLIC } [, ...] [ WITH 
GRANT OPTION ] 

Mais comme dit a_horse_with_no_name, ces privilèges ne peuvent être réglés au niveau de la base de données.

Documentation

+0

'insérer, mettre à jour, supprimer, truncate' ne sont pas des privilèges qui peuvent être accordées au niveau de la base de données –

+0

Vous droit, mon mauvais – Caligone