Vous n'êtes pas identifié(e).
Bonjour,
Bon désolé de faire du crossposting, mais je me rend compte que le forum où j'ai posté précédemment n'est peut être pas le plus adapté vu le peu de passage dans la section postgres ( http://www.developpez.net/forums/d98696 … ost5526090 ).
Voilà mon message originel (depuis j'ai essayé d'autres manips, mais ça ne marche toujours pas).
j'ai un "serveur" postgresql 8.3 distant auquel je me connecte grâce à pgAdmin.
Dessus j'ai créé une base nommée embtrack à laquelle je me connecte grâce à un rôle de connexion jmnicolas auquel j'avais donné les droits d'amin totaux lors de l'installation de postgres.
A noter que jmnicolas "possède" embtrack.
Jusque là tout va bien, si ce n'est que maintenant la base va rentrer en production et j'aimerais créer un utilisateur lambda qui ait juste les droits select, insert, update, delete et connect.
J'ai donc créé embtrack_utilisateur en tant que rôle de groupe (j'ai aussi fait l'essais avec rôle de connexion, je comprend pas bien ces histoires de rôles, le manuel est pas clair amha).
Puis sur embtrack je lance le sql suivant (que j'ai formé en utilisant le manuel) :
grant select, insert, update, delete, connect
on database embtrack
to embtrack_utilisateur;
Mais j'ai le message d'erreur suivant :
ERREUR: droit SELECT invalide pour la base de données
********** Erreur **********
ERREUR: droit SELECT invalide pour la base de données
État SQL :0LP01
Si je lance la commande pour chaque table ça fonctionne, mais le programme que je développe (C# 3.5 avec npgsql) ne parvient pas à se connecter en utilisant cet utilisateur.
grant select, insert, update, delete
on table adresse, [...]
to embtrack_utilisateur;
Help ?
PS je fais tout sous pgAdmin depuis un client Windows, postgres est hébergée sur un serveur Debian avec que de la ligne de commande qui fait peur
Hors ligne
Un utilisateur a le droit de se connecter, un groupe ne le peut pas. Donc il n'est pas très étonnant que votre programme ne puisse pas se connecter si vous utilisez un groupe. Avoir le message d'erreur permettrait de s'assurer qu'il s'agit bien de ce problème.
Concernant la gestion des droits dans PostgreSQL, vous devez donner les droits objets par objets et chaque objet a des droits particuliers. Donc donner le droit SELECT à une base n'a aucun sens dans ce cadre. On ne fait pas de SELECT sur une base. On se connecte ou on crée des objets, d'où les droits CONNECT et CREATE pour ce type d'objet. Par contre, sur une table, on peut faire des SELECT, des UPDATE, etc. d'où le fait que le GRANT SELECT sur une table fonctionne.
Avant la 9.0, il fallait le faire sur chaque table. Avec la 9.0, il est possible de le faire pour toutes les tables d'un schéma.
Je vous conseille de lire le document sur GRANT (http://docs.postgresql.fr/9.0/sql-grant.html) et REVOKE (http://docs.postgresql.fr/9.0/sql-revoke.html), ça vous permettra de mieux comprendre la gestion des droits sous PostgreSQL.
Guillaume.
Hors ligne
Bonjour,
Le message d'erreur est normal. Prenons le droit SELECT par exemple. C'est un droit de table. On ne peut donc pas l'assigner à une base de données. Il faut l'assigner à une table. C'est là que c'est pénible: vous devez faire vos grants sur tous les objets de la base. En 9.0 il y a une commande pour tout faire d'un coup, mais en 8.4 et précédentes, c'est malheureusement manuel.
On peut malgré tout l'automatiser partiellement :
SELECT 'GRANT SELECT ON TABLE ' || schemaname || '.' || tablename || ' TO embtrack_utilisateur;' from pg_tables where schemaname = 'public';
Le résultat de cette requête sera un script prêt à l'emploi. Je vous laisse le modifier à votre guise pour qu'il corresponde exactement à vos besoins.
Marc.
Hors ligne
J'ai donc séparé mes instructions en deux, l'une pour la base et l'autre pour les tables et effectivement ça marche.
Je joint mon sql des fois que ça puisse aider quelqu'un qui trouverait ce post.
Merci à vous deux pour votre expertise, je "bookmark" ce forum.
grant connect
on database embtrack
to embtrack_utilisateur;
grant select, insert, update, delete
on table adresse, associer, description_panne_courante, descr_intervention_courante, embarquement, embarquer, embarqueur, entreprise, fournir, intervention, materiel_embarque, panne, referent, type_embarqueur, type_materiel
to embtrack_utilisateur;
Hors ligne