psql: FATAL: l'authentification d'identification a échoué pour l'utilisateur «postgres»

372

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

Je peux utiliser pgAdminIII avec succès (c'est-à-dire se connecter / se connecter), mais lorsque j'essaie de me connecter au serveur en utilisant le même nom d'utilisateur / pwd sur la ligne de commande (en utilisant psql), j'obtiens l'erreur:

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

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

morpheous
la source
Ce post stackoverflow a fonctionné pour moi: stackoverflow.com/a/18664239/2110769
Andrea Araldo

Réponses:

194

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.

Frank Heikens
la source
36
Ça ne marche pas pour moi. J'ai passé des heures dessus! Tout ce que je veux faire, c'est exécuter des commandes psql dans mon terminal. De quoi ai-je besoin pour que le fichier ressemble à cela ??
Sean
54
@SeanA vous avez besoin de quelque chose comme 'sudo -u postgres psql'
JLarky
8
N'oubliez pas de ';' à la fin de chaque instruction sur psql. Ça a l'air idiot mais ça arrive hehe.
omrsin
42
@Robert: "postgresql est la base de données la plus hostile aux utilisateurs"? Essayez Oracle un jour pour avoir une certaine perspective ... :)
mivk
5
Pour ceux qui utilisent des rails, j'ai dû définir le pg_hba.conf, et changer «ident» en «mot de passe». Le changer en confiance n'a pas fonctionné.
Abe Petrillo
412

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

Par défaut, postgres crée un utilisateur nommé 'postgres'. Nous nous connectons comme elle et lui donnons un mot de passe.

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

Déconnectez-vous psqlen tapant \qou ctrl+d. Ensuite, nous nous connectons en tant que «postgres». La -h localhostpartie est importante : elle indique au psqlclient que nous souhaitons nous connecter en utilisant une connexion TCP (qui est 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
Manav
la source
13
Si vous définissez, PGHOST=localhostvous n'avez pas besoin de spécifier l' -hoption à chaque fois. Cela fonctionne également avec d'autres pg_*commandes telles que pg_dump.
Sameer
1
Il est documenté ici: help.ubuntu.com/12.04/serverguide/postgresql.html
Hendra Uzia
2
Cela était nécessaire pour activer une installation Mediawiki sur Debian avec PostgreSQL.
mivk
2 ans plus tard, et je dois aussi le faire sur un Mac .
Manav
1
mauvais car il y a un problème de sécurité, voir ici: serverfault.com/questions/110154/…
Erdinc Ay
161

Modifiez le fichier /etc/postgresql/8.4/main/pg_hba.confet remplacez-le identou peerpar md5ou trust, selon que vous souhaitez ou non qu'il demande un mot de passe sur votre propre ordinateur. Rechargez ensuite le fichier de configuration avec:

/etc/init.d/postgresql reload
Danny Milosavljevic
la source
4
une commande redémarre postgresql: /etc/init.d/postgresql restart
Tyler Long
14
Pourquoi un redémarrage quand un rechargement suffit?
Frank Heikens
Dans ce cas: "/etc/init.d/postgresql-8.4 reload"
shaytac
1
celui-ci a fonctionné pour moi. Le passage de pair à md5 était suffisant.
Jonatas CD
1
OK, je suis un noob postgresql, mais je dois signaler que cela n'a restartfonctionné que pour moi, pas reload--- après les modifications apportées à /etc/postgresql/9.5/main/pg_hba.conf(changer peeren trust).
Mike O'Connor
91

Vous obtenez cette erreur car vous échouez à l'authentification client. Sur la base du message d'erreur, vous disposez probablement de la configuration postgres par défaut, qui définit la méthode d'authentification client sur "IDENT" pour toutes les connexions PostgreSQL.

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

confiance

Autorisez la connexion sans condition. Cette méthode permet à toute personne pouvant se connecter au serveur de base de données PostgreSQL de se connecter en tant qu'utilisateur 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.

rejeter

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

md5

Obliger le client à fournir un mot de passe haché à double MD5 pour l'authentification. Voir la section 19.3.2 pour plus de détails.

mot de passe

Exigez du client qu'il fournisse 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 approuvés. Voir la section 19.3.2 pour plus de détails.

gss

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

sspi

Utilisez SSPI pour authentifier l'utilisateur. Ceci n'est disponible que sous 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 base de données demandé. L'authentification d'identité ne peut être utilisée que sur les connexions TCP / IP. Lorsqu'elle est spécifiée pour les connexions locales, l'authentification homologue sera utilisée à la place. Voir la section 19.3.5 pour plus de détails.

pair

Obtenez le nom d'utilisateur du système d'exploitation du client à partir du système d'exploitation et vérifiez s'il correspond au nom d'utilisateur de base de données demandé. Ceci n'est disponible que pour les connexions locales. Voir 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 de modules d'authentification enfichables (PAM) fourni par le système d'exploitation. Voir la section 19.3.10 pour plus de détails.

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

  1. Changer la méthode d'authentification (s) défini dans votre pg_hba.conf fichier trust, md5ou password( en fonction de vos besoins de sécurité et de simplicité) pour les enregistrements de connexion locale que vous avez définies là - dedans.

  2. Mettez pg_ident.confà jour pour mapper les utilisateurs de votre système d'exploitation aux utilisateurs PostgreSQL et accordez-leur 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 pas d'authentification supplémentaire et accordera l'accès à cet utilisateur en fonction des privilèges (rôles) qui lui sont attribués dans la base de données. Il s'agit de la configuration par défaut.

Remarque: l'emplacement pg_hba.confet pg_ident.confdépend du système d'exploitation.

Leo Bedrosian
la source
4
Pour moi, c'est la meilleure réponse. Lorsque vous connaissez toutes ces options, vous pouvez facilement modifier la conf. Et surtout lorsque vous êtes sur une machine Dev, vous pouvez simplement définir 'ident' pour toutes les entrées pour éviter de perdre votre temps. Merci
venkatareddy
1
Cela m'a également été utile. Dans mon cas, le fichier pg_hba.conf a été défini sur peer, je l'ai changé en mot de passe. Notez qu'à partir d'une installation vanilla, j'ai également dû définir un mot de passe pour l'utilisateur postgres, sudo su - postgres psql, \ password définir un mot de passe. Ensuite, lancez une connexion par défaut à partir de pdgadmin3 avec le nom d'utilisateur postgres et votre mot de passe que vous avez défini.
edencorbin
1
Et où se trouve ce fichier? Certes, vous devrez peut-être faire une liste, car il ne semble pas y avoir de cohérence entre les versions. Je suppose que je vais simplement lancer la recherche sur '/'.
JosephK
1
Sur Ubuntu-16.04 c'est /etc/postgresql/9.6/main/pg_hba.conf.
Mike O'Connor
1
En tant que débutant sur psql, c'est une aide
précieuse
45

Il suffit d'ajouter le -h localhostmors pour travailler

boulder_ruby
la source
Savons-nous pourquoi cela le corrige?
Michael Pell
Les valeurs par défaut de postgresql ne sont pas définies de manière raisonnable. Ils l'ont peut-être réparé maintenant, je ne sais pas. De toute évidence, l'URL par défaut devrait êtrethis_computer = 'http://localhost'
boulder_ruby
15

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:
Ivan Trechyokas
la source
15

Dans le cas où rien de ce qui précède ne fonctionne pour vous:

j'ai fait pas mal d'installations Postgres, mais j'ai été déconcerté aujourd'hui sur un système RedHat 6.5 (en installant Postgres 9.3). Ma configuration hba.conf typique qu'Aron montre ci-dessus n'a pas fonctionné. 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.

Ethan Brown
la source
Merci Ethan. J'utilise Fedora 20 et j'ai le même problème que celui de l'OP. Après avoir changé l'IPV4 et l'IPV6 en mot de passe. La connexion a réussi.
Ibn Saeed
1
Je vous en prie. Tant de fois, j'ai bénéficié d'autres publications lorsque j'ai rencontré un problème de programmation ou de système. Heureux d'avoir pu redonner un peu.
Ethan Brown
1
Cela m'a sauvé la vie sur Fedora 32!
Rami
12

De toutes les réponses ci-dessus, rien n'a fonctionné 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 réussit enfin pour la commande suivante:

psql -U produser -d dbname -h localhost -W 
Joseph Persie
la source
Ensuite, cela m'a aidé ici, Joseph. Surtout, la commande de connexion à la fin pour m'aider à le tester. De plus, j'ajouterais un redémarrage du service Postgresql au cas où quelqu'un se poserait la question (mais je comprends que c'est implicite). Je l'apprécie beaucoup!
Harlin
10

J'ai trouvé que je devais installer un serveur d'identité, qui écoute sur le port 113.

sudo apt-get install pidentd
sudo service postgresql restart

Et puis ident a travaillé.

Dustin Kirkland
la source
10

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, psqlces deux programmes se connectent probablement différemment à la base de données.

[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 d'hôte, psql se connectera via un socket de domaine Unix à un serveur sur l'hôte local, ou via TCP / IP à localhost sur les machines qui n'ont pas de sockets de domaine Unix.

Si vous n'exécutez pas quelque chose comme psql ... -h host_name ..., et que vous exécutez Ubuntu, psqlvous devez vous connecter via un socket de domaine Unix, donc PostgreSQL n'est probablement pas configuré pour autoriser l'une des méthodes d'authentification par mot de passe pour l' utilisateur postgres .

Vous pouvez tester cela en exécutant:

sudo -u postgres psql

Si ce qui précède fonctionne, votre serveur est probablement configuré pour utiliser l' authentification par les pairs pour les connexions locales par l' utilisateur postgres , c'est-à-dire demander au système d'exploitation votre nom d'utilisateur pour confirmer que vous êtes postgres .

C'est donc probablement votre fichier pg_hba.conf

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 psqlcommande, 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 du fichier pg_hba.conf commencent par #.]

Si vous êtes incluez le nom d'hôte dans votre psqlcommande, 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 psql. En cas de doute sur l'endroit où le mettre, placez-le juste 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 souligné]:

Le premier enregistrement avec un type de connexion , une adresse client , une base de données demandée et un nom d'utilisateur correspondant est utilisé pour effectuer l'authentification. Il n'y a pas de "relais" 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

Vous ne pourrez alors pas vous connecter via:

psql -u postgres

Sauf si l'une de ces entrées se trouve dans votre fichier pg_hba.conf au - dessus de 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!
Kenny Evitt
la source
2
tard dans le jeu, mais, sérieusement, merci d'avoir fait l'effort d'expliquer les choses correctement pour que je comprenne!
Jeffrey 'jf' Lim
10

Dans mon cas, 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

VanThaoNguyen
la source
7

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 par les pairs fonctionne en obtenant le nom d'utilisateur du système d'exploitation du client à partir du noyau et en l'utilisant comme nom d'utilisateur de base de données autorisé (avec mappage de nom d'utilisateur facultatif). Cette méthode n'est prise en charge que 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, sauf pour la façon dont le mot de passe est envoyé via la connexion, à savoir MD5 haché et texte clair respectivement.

Si vous êtes préoccupé par les attaques par "reniflement" de mot de passe, alors md5 est préférable. Un mot de passe simple doit toujours être évité si possible. Cependant, md5 ne peut pas être utilisé avec la fonction db_user_namespace. Si la connexion est protégée par le 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 l'on dépend de l'utilisation de SSL).

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

Suneel Kumar
la source
7

Pour fedora26 et postgres9.6

Tout d'abord, connectez-vous en tant qu'utilisateur root puis entrez dans psql avec les commandes suivantes

$ su postgres  

puis

$ psql

dans psqltrouver l'emplacement de hba_file ==> signifiepg_hba.conf

postgres=# show hba_file ; 
 hba_file  
--------------------------------------   
 /etc/postgresql/9.6/main/pg_hba.conf  
(1 row)  

dans le fichier pg_hba.confchanger l'accès utilisateur à ce

host all all 127.0.0.1/32 md5
mohsen.nour
la source
6

ma solution sur PostgreSQL 9.3 sur Mac OSX dans le shell bash était d'utiliser sudopour aller dans le dossier de données, puis d'ajouter les lignes nécessaires au pg_hba.conffichier pour permettre à tous les utilisateurs de faire confiance et de pouvoir se connecter. C'est ce que 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
Aaron Lelevier
la source
1
C'est bien pour le serveur de développement, mais je ne le recommanderais pas pour un environnement de production car vous n'avez plus besoin d'un mot de passe pour vous connecter à la base de données avec ces paramètres.
Michael
4

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, ce qui entraîne l'échec de l'authentification. Il échoue quelle que soit la configuration supplémentaire ajoutée à la fin du fichier .conf.

Pour vérifier quelle ligne de configuration est utilisée, assurez-vous de 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 le commenter.

Jeremy Whiting
la source
3

Un hack autour de cela est d'éditer pg_hba.conf

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

Pour temporairement

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

À ce stade, vous avez terminé. Pour plus de sécurité, alors allez

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

puis revenez en arrière et définissez pg_hba.conf sur

# Database administrative login by Unix domain socket
local   all             postgres                                   md5
ntg
la source
1

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 d' identification même pour l'adresse IP6 (malgré que je n'ai que 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
TMa
la source
0

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

systemctl restart postgresql-9.3.service
Jaswinder
la source
C'est maintenant justepostgresql
Neil Chowdhury
@NeilChowdhury service postgresql a toujours la version dans le nom du service au moins dans les systèmes Linux. Exécutez cette commande pour voirsystemctl status | grep postgres
Ikrom
0

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

brew cask reinstall pgadmin4
Sofia Khwaja
la source
0

Pour Windows si vous ne souhaitez pas modifier pb_gba.conf, c'est-à-dire laisser la méthode à MD5 (par défaut), créez un nouvel utilisateur, en exécutant cette requête dans l'éditeur de requêtes dans PGadmin PGadmin

CREATE USER admin WITH PASSWORD 'secret'

puis en cmd

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

où dbname est votre db dans postgresql

entrez la description de l'image ici

Ajay Tom George
la source
-3

Cela a fonctionné pour moi: http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

local   all             postgres                                trust
local   all             myapp_usr                               trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust
Ing. M.D'Ambrosio
la source
1
Cela permet à quiconque de localhost de se connecter en tant qu'utilisateur. Ce comportement n'est mentionné nulle part dans le lien. Et oui, les pages d'informations Debian contiennent la même chose.
rkapl