web-dev-qa-db-fra.com

psql: FATAL: L'authentification Ident a échoué pour l'utilisateur "postgres"

J'ai installé PostgreSQL et pgAdminIII sur ma boîte Ubuntu Karmic.

Je peux utiliser pgAdminIII avec succès (c'est-à-dire connecter/ouvrir une session). Cependant, lorsque j'essaie de me connecter au serveur en utilisant le même nom d'utilisateur/pwd sur la ligne de commande (avec psql), le message d'erreur suivant s'affiche:

psql: FATAL:  Ident authentication failed for user "postgres"

Est-ce que quelqu'un maintenant comment résoudre ce problème?

347
morpheous

Avez-vous défini les paramètres appropriés dans pg_hba.conf?

Voir https://help.ubuntu.com/stable/serverguide/postgresql.html comment le faire.

183
Frank Heikens

Les étapes suivantes fonctionnent pour une nouvelle installation de postgres 9.1 sur Ubuntu 12.04. (Travaillé aussi pour postgres 9.3.9 sur Ubuntu 14.04.)

Postgres crée par défaut un utilisateur nommé 'postgres'. Nous nous connectons sous son nom et lui donnons un mot de passe.

$ Sudo -u postgres psql
\password
Enter password: ...
...

Déconnectez-vous de psql en tapant \q ou ctrl+d. Ensuite, nous nous connectons en tant que "postgres". La partie -h localhostest important: elle indique au client psql que nous souhaitons nous connecter à l'aide d'une connexion TCP (configurée pour utiliser l'authentification par mot de passe), et non par une connexion PEER ( qui ne se soucie pas du mot de passe).

$ psql -U postgres -h localhost
401
Manav

Editez le fichier /etc/postgresql/8.4/main/pg_hba.conf et remplacez ident ou peer par md5 ou trust, selon que vous souhaitiez ou non demander un mot de passe sur votre ordinateur. Rechargez ensuite le fichier de configuration avec:

/etc/init.d/postgresql reload
152
Danny Milosavljevic

Vous obtenez cette erreur parce que vous échouez à l'authentification du client. En fonction du message d'erreur, vous avez probablement la configuration postgres par défaut, qui définit la méthode d'authentification du client sur "IDENT" pour toutes les connexions PostgreSQL.

Vous devez absolument lire la section 19.1 Authentification du client dans le manuel PostgreSQL pour mieux comprendre les paramètres d’authentification disponibles (pour chaque enregistrement de pg_hba.conf ), mais voici l'extrait pertinent pour vous aider à résoudre le problème que vous rencontrez (extrait du version 9.5 du manuel ):

confiance

Autoriser la connexion sans condition. Cette méthode permet à toute personne pouvant se connecter au serveur de base de données PostgreSQL de se connecter comme n'importe quel utilisateur de PostgreSQL de son choix, sans avoir besoin d'un mot de passe ou de toute autre authentification. Voir la section 19.3.1 pour plus de détails.

rejette

Rejetez la connexion sans condition. Ceci est utile pour "filtrer" certains hôtes d'un groupe. Par exemple, une ligne de rejet peut empêcher un hôte spécifique de se connecter, tandis qu'une ligne ultérieure permet aux autres hôtes d'un réseau spécifique de se connecter.

md5

Demander au client de fournir un mot de passe à double hachage MD5 pour l'authentification. Voir la section 19.3.2 pour plus de détails.

mot de passe

Demander au client de fournir un mot de passe non chiffré pour l'authentification. Étant donné que le mot de passe est envoyé en texte clair sur le réseau, il ne doit pas être utilisé sur des réseaux non fiables. Voir la section 19.3.2 pour plus de détails.

gss

Utilisez GSSAPI pour authentifier l'utilisateur. Ceci est uniquement disponible pour les connexions TCP/IP. Voir la section 19.3.3 pour plus de détails.

sspi

Utilisez SSPI pour authentifier l'utilisateur. Ceci est uniquement disponible sur Windows. Voir la section 19.3.4 pour plus de détails.

ident

Obtenez le nom d'utilisateur du système d'exploitation du client en contactant le serveur d'identification sur le client et vérifiez s'il correspond au nom d'utilisateur de la base de données demandé. L'authentification d'identité ne peut être utilisée que sur les connexions TCP/IP. Lorsque spécifié pour les connexions locales, l'authentification entre homologues sera utilisée à la place. Voir la section 19.3.5 pour plus de détails.

homologue

Obtenez le nom d'utilisateur du système d'exploitation du client auprès du système d'exploitation et vérifiez s'il correspond au nom d'utilisateur de la base de données demandé. Ceci est uniquement disponible pour les connexions locales. Voir la section 19.3.6 pour plus de détails.

ldap

Authentifiez-vous à l'aide d'un serveur LDAP. Voir la section 19.3.7 pour plus de détails.

rayon

Authentifiez-vous à l'aide d'un serveur RADIUS. Voir la section 19.3.8 pour plus de détails.

cert

Authentifiez-vous à l'aide de certificats clients SSL. Voir la section 19.3.9 pour plus de détails.

pam

Authentifiez-vous à l'aide du service PAM (Pluggable Authentication Modules) fourni par le système d'exploitation. Voir la section 19.3.10 pour plus de détails.

Alors ... pour résoudre le problème que vous rencontrez, vous pouvez effectuer l’une des opérations suivantes:

  1. Changez la ou les méthodes d'authentification définies dans votre fichier pg_hba.conf en trust, md5 ou password (en fonction de vos besoins en matière de sécurité et de simplicité) pour les enregistrements de connexion locale que vous avez définis.

  2. Mettez à jour pg_ident.conf pour mapper les utilisateurs de votre système d'exploitation aux utilisateurs de PostgreSQL et leur octroyer les privilèges d'accès correspondants, en fonction de vos besoins.

  3. Laissez les paramètres IDENT seuls et créez des utilisateurs dans votre base de données pour chaque utilisateur du système d'exploitation auquel vous souhaitez accorder l'accès. Si un utilisateur est déjà authentifié par le système d'exploitation et connecté, PostgreSQL ne nécessitera plus d'authentification et lui accordera l'accès en fonction des privilèges (rôles) qui lui sont attribués dans la base de données. C'est la configuration par défaut.

Remarque: L'emplacement de pg_hba.conf et pg_ident.conf dépend du système d'exploitation.

78
Haig Bedrosian

Ajouter simplement le bit -h localhost était tout ce dont j'avais besoin pour travailler

44
boulder_ruby

Vous pouvez définir la variable d'environnement PGHOST=localhost:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:
14
Ivan Trechyokas

Si rien de ce qui précède ne fonctionne pour vous:

J'ai fait pas mal d’installations Postgres, mais j’ai été flippé aujourd’hui sur un système RedHat 6.5 (installation de Postgres 9.3). Ma configuration hba.conf typique montrée ci-dessus par Aron ne fonctionnait pas. Il s'est avéré que mon système utilisait IPV6 et ignorait la configuration IPV4. Ajout de la ligne:

Host    all             all             ::1/128                 password

m'a permis de me connecter avec succès.

13
Ethan Brown

J'ai constaté que je devais installer un serveur d'identité, à l'écoute sur le port 113.

Sudo apt-get install pidentd
Sudo service postgresql restart

Et puis ident a fonctionné.

10
Dustin Kirkland

Sur toutes les réponses ci-dessus, rien ne fonctionnait pour moi. J'ai dû changer manuellement le mot de passe des utilisateurs dans la base de données et cela a soudainement fonctionné.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

J'ai utilisé les paramètres suivants:

pg_hba.conf

local   all             all                                     peer
# IPv4 local connections:
Host    all             all             127.0.0.1/32            password  
# IPv6 local connections:
Host    all             all             ::1/128                 password

La connexion est finalement réussie pour la commande suivante:

psql -U produser -d dbname -h localhost -W 
10
Joseph Persie

Le problème est toujours votre fichier pg_hba.conf. Cette ligne: Vous pouvez trouver ce fichier dans/etc/postgres/varion/main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

Ce sont de brèves descriptions des deux options selon les documents officiels de PostgreSQL sur les méthodes d'authentification.

Authentification par les pairs

La méthode d'authentification entre homologues consiste à obtenir le nom d'utilisateur du système d'exploitation du client auprès du noyau et à l'utiliser comme nom d'utilisateur de base de données autorisé (avec mappage facultatif du nom d'utilisateur). Cette méthode est uniquement prise en charge sur les connexions locales.

Authentification par mot de passe

Les méthodes d'authentification par mot de passe sont md5 et mot de passe. Ces méthodes fonctionnent de manière similaire, à l'exception de la manière dont le mot de passe est envoyé via la connexion, à savoir MD5-hashed et clear-text, respectivement.

Si vous êtes préoccupé par les attaques par "reniflement" par mot de passe, nous vous conseillons md5 Le mot de passe simple doit toujours être évité si possible. Cependant, md5 ne peut pas être utilisé avec la fonctionnalité db_user_namespace. Si la connexion est protégée par un cryptage SSL, le mot de passe peut être utilisé en toute sécurité (bien que l'authentification par certificat SSL puisse être un meilleur choix si vous utilisez SSL).

Après avoir modifié ce fichier, n'oubliez pas de redémarrer votre serveur PostgreSQL. Si vous êtes sous Linux, ce serait Sudo service postgresql restart.

7
Suneel Kumar

Hmmm ...

Si vous pouvez vous connecter avec le nom d'utilisateur et le mot de passe dans pgAdminIII mais que vous ne pouvez pas vous connecter avec psqlname__, ces deux programmes se connectent probablement à la base de données différemment.

[Si vous vous connectez à différentes bases de données, essayez d’abord de vous connecter à la même base de données. Voir ci-dessous.]

De PostgreSQL: Documentation: 9.3: psql :

Si vous omettez le nom de l'hôte, psql se connectera via un socket de domaine Unix à un serveur de l'hôte local ou via TCP/IP vers localhost sur des ordinateurs ne disposant pas de sockets de domaine Unix.

Si vous n'exécutez pas quelque chose comme psql ... -h Host_name ..., et que vous utilisez Ubuntu, psqldevrait se connecter via un socket de domaine Unix. Par conséquent, PostgreSQL n'est probablement pas configuré pour autoriser une des méthodes d'authentification par mot de passe pour le postgres utilisateur.

Vous pouvez le tester en lançant:

Sudo -u postgres psql

Si cela fonctionne, votre serveur est probablement configuré pour utiliser peer l'authentification des connexions locales par l'utilisateur postgres, c'est-à-dire demander à votre système d'exploitation votre nom d'utilisateur pour confirmer que vous êtes bien connecté. postgres.

C'est donc probablement votre [pg_hba.conf fichier

Le chemin complet du fichier sera quelque chose comme / etc/postgresql/9.3/main/pg_hba.conf. Vous pouvez le voir par exemple Sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Si vous omettez le nom d'hôte dans votre commande psqlname__, vous devriez pouvoir vous connecter si vous ajoutez l'entrée suivante à votre fichier pg_hba.conf:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[Les lignes commentées dans le fichier pg_hba.conf commencent par #.]

Si vous êtes , y compris le nom d'hôte dans votre commande psqlname__, ajoutez cette entrée à la place:

# Connection type   Database   User       IP addresses   Method
Host                all        postgres   127.0.0.1/32   md5

Vous devez mettre l'entrée avant que toute autre entrée ne corresponde à votre connexion via psqlname__. En cas de doute sur l'endroit où le mettre, placez-le simplement avant la première ligne non commentée.

En savoir plus sur pg_hba.conf

De PostgreSQL: Documentation: 9.3: Le fichier pg_hba.conf [gras, en gras]:

Le premier enregistrement avec un type de connexion correspondant , adresse client , La base de données demandée et le nom d'utilisateur sont utilisés pour l'authentification. Il n'y a pas de "sauvegarde directe" ou de "sauvegarde": si un enregistrement est choisi et que l'authentification échoue, les enregistrements suivants ne sont pas pris en compte. Si aucun enregistrement ne correspond, l'accès est refusé.

Notez que les enregistrements ne correspondent pas à la méthode d'authentification . Donc, si votre fichier pg_hba.conf contient l'entrée suivante:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

Ensuite, vous ne pourrez pas vous connecter via:

psql -u postgres

Sauf si l'une de ces entrées est dans votre [pg_hba.conf fichier ci-dessus l'entrée précédente:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!
7
Kenny Evitt

ma solution sous BasgreSQL 9.3 et Mac OSX sur PostgreSQL était d’utiliser le nom Sudopour aller dans le dossier de données, puis ajouter les lignes nécessaires au fichier pg_hba.conf pour permettre à tous les utilisateurs d’être fiables et en mesure de se connecter. J'ai fait:

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
Sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
Host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W
6
Aaron Lelevier

J'ai passé plus de temps à résoudre cette erreur que je tiens à admettre.

L'ordre de configuration de l'authentification dans pg_hba.conf est pertinent dans votre cas, je pense. Le fichier de configuration par défaut comprend plusieurs lignes dans une installation Vanilla. Ces valeurs par défaut peuvent correspondre aux conditions de vos tentatives d'authentification entraînant un échec d'authentification. Il échoue indépendamment de la configuration supplémentaire ajoutée à la fin du fichier .conf.

Pour vérifier quelle ligne de configuration est utilisée, veillez à consulter le fichier journal par défaut pour les messages. Vous pourriez voir quelque chose comme ça

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "Host     all             all             127.0.0.1/32            ident"

Il s'avère que cette ligne par défaut est à l'origine du rejet.

Host    all             all             127.0.0.1/32            ident

essayez de commenter.

4
Jeremy Whiting

Si vous avez fait tout cela et que cela ne fonctionne toujours pas, vérifiez l'expiration de cet utilisateur:

L'authentification du mot de passe Postgres échoue

4
Brenda J. Butler

Un hack autour de cela consiste à éditer pg_hba.conf

Sudo vi /etc/postgresql/9.3/main/pg_hba.conf

À temporairement

# Database administrative login by Unix domain socket
local   all             postgres                                   trust

À ce stade, vous avez terminé. Pour la sécurité, alors allez et

Sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

puis retournez pg_hba.conf à

# Database administrative login by Unix domain socket
local   all             postgres                                   md5
3
ntg

Pour Fedora26 et postgres9.6

Commencez par vous connecter en tant qu'utilisateur root.
puis entrez dans psql avec les commandes suivantes
$ su postgres
puis tapez $ psql

dans psql trouver l'emplacement de hba_file ==> signifie pg_hba.conf

postgres = # show hba_file;

hba_file

/etc/postgresql/9.6/main/pg_hba.conf
(1 rangée)

dans le fichier pg_hba.conf, changez l'accès utilisateur à cette

Tout héberger 127.0.0.1/32 md5

2
mohsen.nour

Dans mon cas, la solution ici: (pour les personnes concernées), connectez-vous à postgres:

Sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

cordialement

2
VanThaoNguyen

J'ai eu un problème similaire et je l'ai corrigé dans pg_hba.conf lors de la suppression de toutes les méthodes ident , même pour l'adresse IP6 (malgré I avoir seulement IP4 sur la machine).

Host all all 127.0.0.1/32 password
Host all all ::1/128 password
#for pgAdmin running at local network
Host all all 192.168.0.0/24 md5
1
TMa

J'ai dû réinstaller pdAdmin pour résoudre ce problème

brew cask reinstall pgadmin4
0
Sofia Khwaja

J'ai eu le même problème après avoir suivi ceci: Configuration de PostgreSQL pour le développement de Rails dans Ubuntu 12.04

J'ai essayé les autres réponses mais tout ce que j'avais à faire était dans: "config/database.yml"

development:
  adapter: postgresql
  encoding: unicode
  database: (appname)_development
  pool: 5
  username: (username you granted appname database priviledges to)
  password:
0
Daniel

Si vous l’utilisez sur CentOS, vous devrez peut-être recharger postgres après avoir pris les solutions ci-dessus:

systemctl restart postgresql-9.3.service
0
Jaswinder