PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 03/11/2009 02:05:24

xeon
Membre

Problême de droits de listage des bases de données.

Bonsoir,
Je viens à peine de commencer à me mettre à PostGreSQL, mais je me suis heurté à un problème auquel la documentation n'a pu m'aider :(
Je m'explique :

Je crée un utilisateur "usrtest1" qui sera propriétaire de la base de donnée "dbtest1". Jusque là pas de problèmes.
Je me connecte avec l'utilisateur postgres (su postgres), je fais "psql -l" et la commande me renvois :

        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 dbtest1   | usrtest1 | UTF8
 postgres  | postgres | UTF8
 template0 | postgres | UTF8
 template1 | postgres | UTF8
(4 rows)

Ce qui est logique vu que je suis avec l'utilisateur postgres qui est superutilisateur.
maintenant je me connecte avec l'utilisateur usrtest1 (psql -U usrtest1 -d dbtest1 -c '\l')
Voilà ce que me renvois la commande :

        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 dbtest1   | usrtest1 | UTF8
 postgres  | postgres | UTF8
 template0 | postgres | UTF8
 template1 | postgres | UTF8
(4 rows)

Et voila le problème, je ne veut pas que l'utilisateur usrtest1 voit les bases des autres utilisateurs, en plus il peut effectuer des query sur les bases qui ne sont pas les siennes.
J'ai testé de faire des rôles et de supprimer touts les accès de ceux ci sur les autres bases, rien ne change il peut toujours visualiser les autres bases.
Donc il me faudrait un moyen que lorsque l'utilisateur liste les bases, seulement celles dont il est le propriétaire s'affichent, et pas les autres ce qui devrais me donner quand je fais cette commande : psql -U usrtest1 -d dbtest1 -c '\l'

        List of databases
   Name    |  Owner   | Encoding
-----------+----------+----------
 dbtest1   | usrtest1 | UTF8
(1 rows)

Avez vous une solution ?
Je tiens à préciser que je n'utilise pas phpPgAdmin (pas de php, uniquement apache CGI (c++)), uniquement les outils du style de Navicat et PgAdmin et la ligne de commande.
J'ai testé le coup du 'revoke select on pg_database from public;' cette solution me parait extrêmement barbare!?!

Je vous remercie d'avance.
Amicalement,
Xeon.

Hors ligne

#2 03/11/2009 08:52:40

Marc Cousin
Membre

Re : Problême de droits de listage des bases de données.

Tous les utilisateurs ont le droit d'obtenir la liste de toutes les bases du clusters. On ne peut 'que' leur interdire l'accès à ces bases :
- Soit via le pg_hba.conf
- Soit en révoquant le droit de connexion à la base pour tous les utilisateurs. De mémoire REVOKE CONNECT ON DATABASE xxx FROM public;

Si tu fais la deuxième solution, tu peux l'appliquer à la base template1, ce qui fait que toutes les autres bases créées ensuite auront la même politique par défaut.

Mais psql -l te donnera la liste de toutes les bases.

Ensuite, rien ne t'empêche par exemple de faire une requête sur la base, et d'en faire un alias sur le système

SELECT pg_database.datname from pg_database join pg_user on (pg_database.datdba=pg_user.usesysid) where usename=current_user;

Dernière modification par Marc Cousin (03/11/2009 08:54:34)


Marc.

Hors ligne

#3 03/11/2009 14:22:38

xeon
Membre

Re : Problême de droits de listage des bases de données.

Bonjour,
Je vous remercie pour votre réponse.
Je vais essayer et je vous tiens au courant.

Amicalement,
Xeon.

Hors ligne

#4 04/11/2009 19:22:24

xeon
Membre

Re : Problême de droits de listage des bases de données.

Bonsoir,
Cette méthode me plait, je vais l'utiliser.
je vous remercie pour votre réponse.

Amicalement,
Xeon.

Dernière modification par xeon (04/11/2009 19:22:41)

Hors ligne

Pied de page des forums