Archive

Articles taggués ‘postgresql’

PostgreSQL et la connexion locale

01/03/2010

Voici un petit casse tête qui a du arriver à plus d’une personne concernant PostgreSQL. Il s’agit de se connecter à une base de données locale avec un compte utilisateur fraîchement créé. Le contexte est ici Ubuntu 9.10 et PostgreSQL 8.4.

Vous créez une base de données et un utilisateurs (en étant superutilisateur bien entendu) :

create role toto login password ‘pwtoto’;

create database dbtoto with owner=toto encoding=’UTF8′;

Puis vous essayez de vous connecter à la base depuis un shell :

psql dbtoto -U toto

psql dbtoto -U toto -W

Et à chaque fois, c’est un échec… “psql: FATAL:  authentification Ident échouée pour l’utilisateur << toto >>”

Maintenant il y a de quoi perdre par mal de temps en contrôlant tout ce qu’on a pu faire, en ré-essayent, en consultant le “man” de psql, etc… Pourtant le message d’erreur contient ici un début de réponse : “Ident”.

En voulant se connecter de cette manière, le client va utiliser une connexion via socket Unix (et pas via TCP/IP). Or dans le fichier /etc/postgresql/8.4/main/pg_ident.conf il est indiqué que pour ce type de connexion le méthode d’authentification sera “ident”. Pour faire court, l’authentification de l’utilisateur est effectuée par le système d’exploitation, ce qui ici échouera puisque “toto” est inconnu en tant qu’utilisateur du système. Le détail de l’explication ici : Authentification fondée sur ident

Par contre en utilisant un socket IPv4 l’authentification sera “md5″, c’est à dire qu’il utilisera le mot de passe crypté envoyé par le client. Et là l’authentification sera effectuée en impliquant uniquement PostgreSQL. Pour forcer l’utilisation d’un socket IPv4 (et régler le problème) :

psql dbtoto -U toto -h localhost

Pour plus d’explication, se reporter au chapitre Authentification du client de la documentation de PostgreSQL, et prendre la peine de regarder ce qu’il y a dans son propre fichier pg_ident.conf.

Cette subtilité étant au niveau de la liaison entre client et serveur PostgreSQL, la problématique sera la même pour un processus tel qu’un serveur Web. Par exemple dans le fichier database.yml de Rails il faudra ajouter une entrée “host”, sans quoi la connexion échouera (Rails n’ajoute pas cette entrée par défaut).

Sam. Informatique ,