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

#1 27/12/2010 13:26:49

genio
Membre

Connexion à postrgrès

Re-bonjour...
J(ai 2/questions à poser :
J'ai créé un rôle dans mon environnement de dev de la façon suivante :
1°)  sudo -i -u postgres
2°) $ psql
Welcome to psql 8.2.15, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

postgres=# CREATE ROLE toto login SUPERUSER INHERIT CREATEDB CREATEROLE;
CREATE ROLE
Ensuite je suis arrivé à connecter une database TITI, avec mon user/mot de passe toto dans Pgadmin III =>  OK

Quand j'ai effectué la même chose sur le serveur de production, je suis allé jusuq'au 'CREATE ROLE', OK
mais ensuite je n'arrive pas à connecter ma database dans mon Padmin III... KO
Pouvez-vous me dire pourquoi ?

Autres questions :
Je n'arrive pas à comprendre les différentes 'bases de maintenace'... postgrès, edb et template1...
Pouvez-vous en 3 mot m'expliquer le rôle de chacune...

En fait j'ai créé mon rôle toto dans la base postgrès => est-ce bon ?

Je suis un peu dans le flou hein ?

Hors ligne

#2 27/12/2010 14:51:18

gleu
Administrateur

Re : Connexion à postrgrès

Pour le 1, merci de préciser le message d'erreur. Il y a de fortes chances que le problème provienne d'une mauvaise configuration du fichier pg_hba.conf mais le seul moyen de s'en assurer est d'avoir le message d'erreur.

Pour le 2, il existe sur la version communautaire de PostgreSQL trois bases de données par défaut : postgres, template1 et template0. template1 est utilisé pour la création d'une nouvelle base de données (c'est ce qu'on appelle une base modèle). Comme il est possible de modifier template1, template0 existe pour permettre de recréer template1 s'il y a eu trop de modifications réalisées sur template1. Elle permet aussi de créer une nouvelle base de données pour un autre encodage. Enfin, postgres set de base de connexion pour les outils de maintenance. Comme on ne peut pas être connecté sur la base qui sera copié pour créer une nouvelle base de données, il faut pouvoir se connecter sur une autre.

Enfin, dernier point, on ne crée par un utilisateur dans une base. Un utilisateur est créé globalement, il est valable pour toutes les bases de données de l'instance.


Guillaume.

Hors ligne

#3 27/12/2010 16:56:13

genio
Membre

Re : Connexion à postrgrès

Merci pour votre réponse...
En fait le problème est que quand je veux connecter ma base de production à PGadminIII, je n'ai aucun message d'erreur ! Je saisis le nom du serveur,la database accédée, mon compte (celui créé dans le role 'toto' avec son password) ... il fait son petit tour et me renvoie la mire 'ajouter un enregistrement de serveur' sans rien me dire...
1°) Sur quel fichier log puis-je voir le problème ?

2°) Je suis en train d'avancer et j'ai regardé les deux fichiers pg_hba.conf de prod et de dev ! Effectivement il y a quelques différences, mais je ne sais pas encore les expliquer... pouvez-vous ?

PRE-PROD
TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
local               all             all                            ident sameuser
# IPv4 local connections:
host                all            all         111.0.0.1/32          trust
# IPv6 local connections:
host                all          all         ::1/128               ident sameuser
# Acces aux DBA via le reseau
host                all           all         0.0.0.0/0               pam




PRODUCTION
# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
# "local" is for Unix domain socket connections only
Local             all             all                   trust
# IPv4 local connections:
Host                  all                all       222.0.0.1/32         trust
host             all                  all       333.31.228.84/32    trust
# IPv6 local connections:
host            all                    all         ::1/128                ident sameuser



On voit que les deux ne sont pas identiques (au moins dans la méthode) et que mon pg_hdba.cpnf de dev à une ligne en plus :
# Acces aux DBA via le reseau
host                all           all         0.0.0.0/0               pam


J'ai essayé de comprendre ce qu'apportait ce 'pam' (qui n'est d'ailleurs pas un spam !)  mais sans succès...

Pouvez-vous encore m'aider ?

Merci d'avance...

Hors ligne

#4 27/12/2010 18:12:42

gleu
Administrateur

Re : Connexion à postrgrès

S'il ne vous renvoit aucun message d'erreur, c'est très bizarre. Je ne vois pas bien comment cela serait possible.

La ligne "host  all  all  0.0.0.0/0  pam" en préprod autorise tout utilisateur PostgreSQL à se connecter au serveur PostgreSQL, à condition de réussir l'authentification via pam. pam est l'acronyme de Pluggable Authentication Module. je ne vois pas trop comment il peut fonctionner pour une connexion réseau mais pourquoi pas...

La ligne "Host  all  all  222.0.0.1/32  trust" en prod autorise tout utilisateur provenant de l'adresse IP 222.0.0.1 à se connecter, même sans connaître le mot de passe de l'utilisateur, ce qui est particulièrement dangereux. Le H majuscule de Host me semble bizarre.

La ligne "host  all  all  333.31.228.84/32  trust" en prod autorisee tout utilisateur provenant de l'adresse IP 333.31.228.84 à se connecter, même sans connaître le mot de passe de l'utilisateur, ce qui est particulièrement dangereux. Cela étant dit, ce n'est pas bien grave vu que cette adresse IP est invalide (pas de nombre supérieur à 255).

Bref, il vous manque une ligne sur le serveur de prod pour que votre PC soit autorisé à accéder au serveur PostgreSQL (je suppose que votre serveur n'a pas l'adresse IP 222.0.0.1).


Guillaume.

Hors ligne

#5 27/12/2010 18:48:52

genio
Membre

Re : Connexion à postrgrès

Merci...
Effectivement, j'ai modifié les adresses IP des serveurs en 111.222. et 333. mais dans mon fichier pg_hba.conf, ces adresses sont correctes...
J'ai voulu cacher les adresse mais je m'aperçoit que c'est pas malin...
En fait, la lignes IPV4 de dev et de prod est la suivante :
host    all         all         127.0.0.1/32          trust
1°) Cette ligne veut-elle dire que tous les utis dont l'adresse IP commence par 127.0.0.1 ont le droit sur la database ?

En prod il y a une ligne de plus qui est
host    all         all         172.31.228.84/32          trust (la 333. de mon précédent post)

Ce qui m'effraie (ou alors je n'ai pas tout compris) c'est qu'il faut créer, dans le fichier pg_hba.conf, une ligne pour chaque connexions qui arrive sur mon serveur postgrès ! Je pense plutôt que ces adresses sont génériques et que tous les pc qui commencent par 222.0.0.1 peuvent se connecter à postgrès... non ?

Une dernière : Comment traduisez vous la ligne :
# IPv6 local connections:
host            all                    all         ::1/128                ident sameuser

Je vous assure sinon que mon pgadminIII ne me rends pas de message d'erreur... on dirait qu'il arrive à se connecter sans y arriver vraiment ! Bizarre...
Sinon j'ai regardé dans les arborescences /var/log/ mais je n'ai pas vu un fichier log décrivant mon problème ...

Merci encore pour vos réponses...

Hors ligne

#6 27/12/2010 19:23:24

gleu
Administrateur

Re : Connexion à postrgrès

genio a écrit :

En fait, la lignes IPV4 de dev et de prod est la suivante :
host    all         all         127.0.0.1/32          trust
1°) Cette ligne veut-elle dire que tous les utis dont l'adresse IP commence par 127.0.0.1 ont le droit sur la database ?

Cette ligne indique que la connexion locale TCP/IP sera autorisée pour tous les utilisateurs sur toutes les bases de données sans avoir à fournir de mot de passe.

genio a écrit :

En prod il y a une ligne de plus qui est
host    all         all         172.31.228.84/32          trust (la 333. de mon précédent post)

Même commentaire que celui ci-dessus, mais pour l'adresse 172.31.228.84.

genio a écrit :

Ce qui m'effraie (ou alors je n'ai pas tout compris) c'est qu'il faut créer, dans le fichier pg_hba.conf, une ligne pour chaque connexions qui arrive sur mon serveur postgrès ! Je pense plutôt que ces adresses sont génériques et que tous les pc qui commencent par 222.0.0.1 peuvent se connecter à postgrès... non ?

Faux et faux. C'est le nombre après le / qui indique le sous-réseau utilisé. /32 indique seule l'adresse est valide, mais X.Y.Z.0/24 permettra d'accepter tout le réseau ayant les adresses allant de X.Y.Z.1 à X.Y.Z.254.

genio a écrit :

Une dernière : Comment traduisez vous la ligne :
# IPv6 local connections:
host            all                    all         ::1/128                ident sameuser

::1/128 est l'adresse localhost en IPv6. Pour "ident sameuser", cela indique que le démon identd sera utilisé pour l'authentification et qu'un utilisateur ne pourra se connecter qu'à une base de données dont le nom est le même que celui de l'utilisateur.

genio a écrit :

Je vous assure sinon que mon pgadminIII ne me rends pas de message d'erreur... on dirait qu'il arrive à se connecter sans y arriver vraiment ! Bizarre...

Vous voulez dire quoi exactement ? soit il est connecté soit il ne l'est pas. Voyez-vous la liste des bases du serveur ?

Tout ce dont on parle ici est indiqué dans la doc sur http://docs.postgresql.fr/9.0/client-au … ation.html


Guillaume.

Hors ligne

#7 28/12/2010 12:38:42

genio
Membre

Re : Connexion à postrgrès

Merci pour toutes vos réponses... c'est OK !

Pour régler mon problème, j'ai modifié mon pg_hba.conf essayé de redémarrer le service postgrès avec l'ordre suivant :
$ /etc/init.d/postgresql restart
J'ai l'erreur suivante :
Stopping postgresql service:                               [FAILED]
rm: cannot remove `/var/run/postmaster.5432.pid': Permission denied
rm: cannot remove `/var/lock/subsys/postgresql': Permission denied
Starting postgresql service: /etc/init.d/postgresql: line 177: /var/akio/log/DB/postgresql.log: Permission denied
touch: cannot touch `/var/lock/subsys/postgresql': Permission denied
/etc/init.d/postgresql: line 184: /var/run/postmaster.5432.pid: Permission denied

Donc je n'ai pas les autorisations => OK

Pourtant j'ai fait un 'sudo -i -u postgres' et le rôle postgres' est =>  LOGIN SUPERUSER INHERIT CREATEDB CREATEROLE...
1°) Le rôle 'superuser' ne suffit-il pas pour relancer le service ?
2°) Faut-il une autorisation en plus au niveau linux (faire partie par exemple d'un groupe 'DBA', comme dans oracle !) ...

Merci encore pour vos réponses...

Hors ligne

#8 28/12/2010 13:57:29

gleu
Administrateur

Re : Connexion à postrgrès

Pour lancer PostgreSQL, il faut être l'utilisateur Unix postgres. Cependant, là, vous exécutez un script unix qui s'attend à ce que vous soyez root. Donc relancez le en tant qu'utilisateur root.

D'autre part, les droits que vous donnez à l'utilisateur PostgreSQL postgres n'ont rien à voir avec le lancement du moteur.


Guillaume.

Hors ligne

#9 28/12/2010 15:27:16

genio
Membre

Re : Connexion à postrgrès

Merci pour vos réponses...
Juste une dernière : l'utilisateur Unix Postgrès : Est-ce le compte 'postgrès' créé dans unix qui aurait les droits 'root' ?

Hors ligne

#10 28/12/2010 15:36:08

gleu
Administrateur

Re : Connexion à postrgrès

Le compte Unix postgres ne doit pas avoir les droits root.


Guillaume.

Hors ligne

Pied de page des forums