psql: FATAL: échec de l'authentification Ident pour Postgres utilisateurs"
j'ai installé PostgreSQL et pgAdminIII sur ma boîte karmique Ubuntu.
je suis capable d'utiliser pgAdminIII avec succès (c'est-à-dire Se connecter/Se connecter), mais quand 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"
quelqu'un maintenant comment résoudre ce problème?
21 réponses
avez-vous paramétré pg_hba.conf?
voir https://help.ubuntu.com/stable/serverguide/postgresql.html comment le faire.
les étapes suivantes fonctionnent pour une nouvelle installation de postgres 9.1 sur Ubuntu 12.04. (Travaillé pour postgres 9.3.9 sur Ubuntu 14.04 aussi.)
par défaut, postgres crée un utilisateur nommé 'postgres'. On se connecte en tant qu'elle, et on lui donne un mot de passe.
$ sudo -u postgres psql
\password
Enter password: ...
...
déconnexion de psql
en tapant \q
ou ctrl+d
. Puis nous nous connectons en tant que'postgres'. Le -h localhost
part est important : il dit le psql
client que nous souhaitons connecter en utilisant une connexion TCP (qui est configurée pour utiliser l'authentification par mot de passe), et non par une connexion par pair (qui ne se soucie pas du mot de passe).
$ psql -U postgres -h localhost
éditez le fichier /etc/postgresql/8.4/main/pg_hba.conf
et remplacez ident
ou peer
par md5
ou trust
, selon que vous voulez qu'il demande un mot de passe sur votre propre ordinateur ou non.
Puis rechargez le fichier de configuration avec:
/etc/init.d/postgresql reload
vous obtenez cette erreur parce que vous ne réussissez pas l'authentification du client. D'après le message d'erreur, vous avez probablement la configuration par défaut de postgres, qui définit la méthode d'authentification du client à "IDENT" pour toutes les connexions PostgreSQL.
vous devriez certainement lire la section 19.1 authentification du Client dans le manuel PostgreSQL pour mieux comprendre les paramètres d'authentification disponible (pour chaque enregistrement dans pg_hba.conf ), Mais voici l'extrait pertinent pour aider avec le problème que vous avez (de la version 9.5 manuel ):
confiance
Autoriser la connexion sans condition. Cette méthode permet à quiconque peut se connecter au serveur de base de données PostgreSQL pour se connecter Utilisateur PostgreSQL qu'ils souhaitent, sans avoir besoin d'un mot de passe ou de toute autre authentification. Voir la Section 19.3.1 pour plus de détails.
rejet
rejetez la connexion inconditionnellement. Ceci est utile pour "filtrage "certains hôtes d'un groupe, par exemple un rejet de ligne pourrait bloquer un hôte spécifique à partir de la connexion, tandis qu'une ligne ultérieure permet hôtes restants dans un réseau spécifique pour se connecter.
md5
exigent du client de fournir un mot de passe double-MD5-hashé pour Authentication. Voir la Section 19.3.2 pour plus de détails.
mot de passe
exiger du client de fournir un mot de passe non crypté pour Authentication. Puisque le mot de passe est envoyé en texte clair sur le réseau, cela ne doit pas être utilisé sur des réseaux non fiables. Voir La Section 19.3.2 pour plus de détails.
esg
utiliser GSSAPI pour authentifier l'utilisateur. Ceci n'est disponible que pour TCP / IP connexion. Voir la Section 19.3.3 pour plus de détails.
sspi
utilise SSPI pour authentifier l'utilisateur. Ceci est uniquement disponible sur Windows. Voir la Section 19.3.4 pour plus de détails.
ident
obtenir le fonctionnement nom d'utilisateur du système du client en contactant le ident serveur sur le client et vérifier s'il correspond à la demande la base de données nom d'utilisateur. L'authentification Ident ne peut être utilisée que sur TCP / IP connexion. Lorsqu'il est spécifié pour les connexions locales, l'authentification d'hôte sera utilisé à la place. Voir la Section 19.3.5 pour plus de détails.
par les pairs
obtenir le nom d'utilisateur du système d'exploitation du client système et vérifier si il correspond au nom d'utilisateur de la base de données demandée. Ce est uniquement disponible pour les connexions locales. Voir la Section 19.3.6 pour détail.
ldap
authentifier à l'aide d'un serveur LDAP. Voir la Section 19.3.7 pour plus de détails.
rayon
authentifier à l'aide d'un serveur RADIUS. Voir la Section 19.3.8 pour plus de détails.
cert
authentifier en utilisant les certificats clients SSL. Voir la Section 19.3.9 pour détail.
pam
authentifier à L'aide du service de Modules D'authentification branchés (PAM) fournis par le système d'exploitation. Voir la Section 19.3.10 pour plus de détails.
So ... pour résoudre le problème que vous rencontrez, vous pourriez faire l'un des suivants:
-
modifier la(Les) méthode (s) d'authentification définie (s) dans votre
pg_hba.conf
fichiertrust
,md5
, oupassword
(selon votre sécurité et la simplicité des besoins) pour la connexion locale d'enregistrements définis dans. -
mise à Jour
pg_ident.conf
à la carte votre système d'exploitation pour les utilisateurs Les utilisateurs de PostgreSQL et leur accorder les privilèges d'accès correspondants, en fonction de vos besoins. -
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 que vous souhaitez accorder l'accès. Si un l'utilisateur est déjà authentifié par L'OS et connecté, PostgreSQL ne nécessitera pas d'authentification supplémentaire et accordera l'accès à ce utilisateur sur la base des privilèges (rôles) qui lui sont attribués dans le la base de données. C'est la configuration par défaut.
Note: l'emplacement de pg_hba.conf
et pg_ident.conf
dépend OS.
ajoutant Simplement le -h localhost
bit a été tout à moi tenus de travailler
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:
dans le cas où aucun de ce qui précède ne fonctionne pour vous:
J'ai fait pas mal d'installations Postgres, mais j'ai été forcé aujourd'hui sur un système RedHat 6.5 (installation de Postgres 9.3). Mon hba typique.la configuration de conf 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. Ajouter la ligne:
host all all ::1/128 password
m'a permis de me connecter avec succès.
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é.
le problème est toujours votre pg_hba.fichier conf. Cette ligne: Vous pouvez trouver ce fichier dans /etc/postgresql/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 PostgreSQL sur les méthodes d'authentification.
"151920920 par les Pairs" authentificationla 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 base de données autorisée. nom d'utilisateur (avec option de mappage de noms d'utilisateurs). Cette méthode n'est supportée que sur les connexions locales.
authentification par mot de passe
les méthodes d'authentification basées sur le mot de passe sont md5 et password. Ces méthodes fonctionnent de la même manière sauf pour la façon dont le mot de passe est envoyé à travers la connexion, à savoir MD5-hashed et clair-texte respectivement.
si vous êtes du tout préoccupé par les attaques" sniffing " de mot de passe, alors md5 est préférable. 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 le cryptage SSL, alors le mot de passe peut être utilisé en toute sécurité (bien que L'authentification du 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 serait sudo service postgresql restart.
de toutes les réponses ci-dessus rien n'a fonctionné pour moi. J'ai dû changer manuellement le mot de passe de l'utilisateur dans la base de données et ça a soudainement fonctionné.
psql -U postgres -d postgres -c "alter user produser with password 'produser';"
j'ai utilisé les réglages 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
ma solution sur PostgreSQL 9.3 sur Mac OSX en shell bash était d'utiliser sudo
pour aller dans le dossier de données, puis d'ajouter les lignes nécessaires au fichier pg_hba.conf
pour permettre à tous les utilisateurs d'être fiables et capables de 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
Hmmm ...
si vous pouvez vous connecter avec le nom d'utilisateur et le mot de passe dans pgAdminIII mais vous ne pouvez pas vous connecter avec psql
alors ces deux programmes se connectent probablement à la base de données différemment.
[si vous vous connectez à des bases de données différentes, essayez d'abord de vous connecter à la même base de données. Voir ci-dessous.]
From PostgreSQL: Documentation: 9.3: psql :
si vous omettez le nom d'hôte, psql se connectera via une socket Unix-domain à un serveur sur l'hôte local, ou via TCP/IP à localhost sur les machines qui n'ont pas de sockets Unix-domain.
si vous n'utilisez pas quelque chose comme psql ... -h host_name ...
, et que vous utilisez Ubuntu, psql
devrait être connecté via une socket Unix-domain, donc PostgreSQL n'est probablement pas configuré pour permettre l'une des méthodes d'authentification par mot de passe pour les postgres de l'utilisateur.
vous pouvez le tester en exécutant:
sudo -u postgres psql
si ce qui précède fonctionne, votre serveur est probablement configuré pour utiliser peer authentification pour les connexions locales par l'utilisateur postgres , c'est-à-dire demander au système D'exploitation de votre nom d'utilisateur pour confirmer que vous êtes postgres .
donc C'est 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 psql
, vous devriez pouvoir vous connecter si vous ajoutez l'entrée suivante à votre pg_hba.conf fichier:
# Connection type Database User IP addresses Method
local all postgres md5
[Lignes commentées dans le pg_hba.conf début du fichier avec #
.]
si vous êtes en incluant le nom d'hôte dans votre commande psql
, 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 toute autre entrée sont appariés pour votre connexion via psql
. En cas de doute sur l'endroit où le placer, mettez-le juste avant la première ligne sans commentaire.
plus d'informations sur pg_hba.conf
à Partir de PostgreSQL: Documentation: 9.3: Le pg_hba.Fichier conf [gras c'est moi qui souligne]:
le premier enregistrement avec une correspondance type de connexion , adresse du client , base de données demandée , et nom d'utilisateur est utilisé pour effectuer l'authentification. Il n'y a pas de" passe-partout "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 sont et non appariés selon la méthode d'authentification. Donc, si votre pg_hba.le fichier conf contient l'entrée suivante:
# Connection type Database User IP addresses Method
local all postgres peer
puis vous ne sera pas être en mesure de se connecter via:
psql -u postgres
sauf si l'une de ces entrées est dans votre pg_hba.conf fichier au-dessus l'ancienne entrée:
# 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!
si vous avez fait tout cela et que cela ne fonctionne toujours pas, vérifiez l'expiration pour cet utilisateur:
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 inclut plusieurs lignes dans une installation standard. Ces valeurs par défaut peuvent correspondre aux conditions de vos tentatives d'authentification résultant en un échec d'authentification. Il échoue quelle que soit la configuration supplémentaire ajoutée à la fin de la .fichier conf.
à vérifiez quelle ligne de configuration est utilisée.assurez-vous de regarder le fichier de log 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.
un hack autour de cela est d'é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 point, vous avez terminé. Pour la sécurité, puis aller et
sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';
puis revenir en arrière et mettre pg_hba.conf retour à
# Database administrative login by Unix domain socket
local all postgres md5
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 (bien 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
dans mon cas, solution ici: (pour les personnes concernées) connexion à postgres:
sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here
concerne
pour fedora26 et postgres9.6
tout d'abord, se connecter en tant que root utilisateur
puis entrer à psql par 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 modifier l'accès de l'utilisateur à ce
host all 127.0.0.1 / 32 md5
j'ai eu la même erreur après avoir suivi ceci: PostgreSQL setup for Rails development in 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:
si vous l'utilisez sur CentOS,vous pouvez avoir besoin de recharger postgres après avoir fait les solutions ci-dessus:
systemctl restart postgresql-9.3.service
ça a marché 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