Message d'erreur Postgres: FATAL: échec de l'authentification Ident pour l'utilisateur «…»

26

Supposons que vous voyez ce message:

FATAL:  Ident authentication failed for user "..."

Quelles sont les causes de ce message d'erreur?

Steve Bennett
la source

Réponses:

36

Cela signifie que Postgres essaie d'authentifier un utilisateur à l'aide du protocole Ident, et ne peut pas. Ident auth fonctionne comme ceci:

  • Vous avez le rôle de base de données 'foo' sur la base de données 'db'
  • Votre pg_hba.conffichier (en /etc/postgres-something/main) définit «Ident» comme le protocole de connexion à la base de données dbpour les utilisateurs se connectant à partir de certains hôtes
  • Le nom d'utilisateur Unix établissant la connexion est 'foo'
  • Un serveur Ident fonctionnant sur la machine à partir de laquelle l'utilisateur se connecte confirme que son nom d'utilisateur est vraiment 'foo'

Causes et solutions possibles:

  1. Aucun serveur Ident n'est en cours d'exécution sur la machine à partir de laquelle vous essayez de vous connecter. Testez cela en essayant de vous y connecter sur le port 113. Si cela échoue, installez un serveur Ident (par exemple, sudo apt-get install oidentd).
  2. Il existe un serveur Ident, mais aucun rôle de base de données ne correspond au nom avec lequel vous essayez de vous connecter ('foo' dans l'exemple ci-dessus). Alors créez-le en vous connectant d'une manière ou d'une autre à la base de données avec des droits de superutilisateur et faites CREATE ROLE foo. Vous pouvez également ajouter une entrée à /etc/postgresql/.../main/pg_ident.conf.
  3. Peut-être que le nom d'utilisateur du shell ne correspond pas au rôle de base de données. Vous pourrez peut-être tester cela en vous connectant au serveur Ident pendant qu'une connexion est en cours et en passant les bons numéros de port.
  4. Peut-être voulez-vous réellement vous connecter avec un mot de passe , pas Ident. Modifiez le pg_hba.conffichier de manière appropriée. Par exemple, changez:

    host all all 127.0.0.1/32 ident
    

    à

    host all all 127.0.0.1/32 md5
    
Steve Bennett
la source
2
Pour Fedora, le fichier est en/var/lib/psql/data
Anwar
Je suppose que personne ne voudrait répondre à la question de savoir pourquoi postgres utilise 'ident' comme connexion par défaut?
icc97
Parce que cela avait du sens il y a 20 ans et que rien ne change jamais dans * nix? :)
Steve Bennett
@ icc97, rien dans cette réponse n'indique que "ident" est la connexion par défaut pour Postgres; D'où vous vient cette idée? Pour autant que je sache, le nom de rôle de superutilisateur par défaut dans un cluster Postgres est "postgres".
Wildcard
9

Je ne suis pas sûr des causes, mais cela m'a corrigé:

dans pg_hba.conf

changer à ceci:

héberger tous tous 127.0.0.1/32 md5

Erreur exacte: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"

jacktrades
la source
1
changer "ident" -> "md5" l'a fait pour moi
webwesen
3

Sur CentOS, ajoutez la ligne suivante à /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

Et commentez les autres entrées.

Bien sûr, ce paramètre n'est pas sécurisé, mais si vous ne faites que jouer sur une machine virtuelle de développement comme moi, alors ça va probablement bien ...

XåpplI'-I0llwlg'I -
la source
0

Si vous ne l'avez pas déjà essayé, consultez votre fichier pg_hba.conf. Il sera nommé quelque chose comme /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); vous devrez peut-être utiliser «find / -name pg_hba.conf» pour le localiser.

En bas du fichier, changez les valeurs de 'METHOD' en 'trust' pour les tests locaux (voir les documents postgres pour des informations complètes). Redémarrez la machine pour vous assurer que tout démarre correctement et que les nouveaux paramètres sont lus.

Espérons que cela guérira vos malheurs. Il a résolu mes problèmes sur Fedora 20 avec PostgreSQL 9.3.

Alan Thompson
la source
Il n'est pas nécessaire de redémarrer votre machine entière lors de la modification des configurations PostgreSQL. Essayez plutôt d'utiliser à pg_ctl reloadpartir de la console ou SELECT pg_reload_conf();lors de l'exécution de SQL en tant qu'utilisateur privilégié.
benjwadams