407 votes

psql : FATAL : L'authentification de l'identité a échoué pour l'utilisateur "postgres".

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

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

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

Quelqu'un sait-il comment résoudre ce problème ?

0 votes

Ce post de stackoverflow a fonctionné pour moi : stackoverflow.com/a/18664239/2110769

426voto

Manav Points 3039

Les étapes suivantes fonctionnent pour une nouvelle installation de postgres 9.1 sur Ubuntu 12.04. (Cela 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 sous son nom, et lui donnons un mot de passe.

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

Déconnexion de psql en tapant \q o ctrl+d . Ensuite, nous nous connectons en tant que 'postgres'. Le site -h localhost partie est important : il indique à l psql 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

13 votes

Si vous définissez PGHOST=localhost vous n'avez pas besoin de spécifier l'option -h à chaque fois. Cela fonctionne également avec d'autres pg_* des commandes telles que pg_dump .

1 votes

2 votes

Ceci était nécessaire pour permettre une installation de Mediawiki sur Debian avec PostgreSQL.

203voto

Frank Heikens Points 29270

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

Voir https://ubuntu.com/server/docs/databases-postgresql comment le faire.

43 votes

Ç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. A quoi dois-je faire ressembler le fichier pour y parvenir ?

57 votes

@SeanA vous avez besoin de quelque chose comme 'sudo -u postgres psql'.

9 votes

N'oubliez pas de mettre ';' à la fin de chaque déclaration sur psql. Cela semble stupide mais cela arrive hehe.

170voto

Modifier le fichier /etc/postgresql/8.4/main/pg_hba.conf et remplacer ident o peer soit par md5 o trust selon que vous voulez ou non qu'il vous demande un mot de passe sur votre propre ordinateur. Ensuite, rechargez le fichier de configuration avec :

/etc/init.d/postgresql reload

4 votes

Une commande redémarre postgresql : /etc/init.d/postgresql restart

14 votes

Pourquoi un redémarrage quand un rechargement suffit ?

0 votes

Dans ce cas : "/etc/init.d/postgresql-8.4 reload"

108voto

Haig Bedrosian Points 1181

Vous obtenez cette erreur parce que l'authentification du client échoue. D'après le message d'erreur, vous avez probablement la configuration postgres par défaut, qui définit la méthode d'authentification du client à "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 dans pg_hba.conf ), mais voici l'extrait pertinent pour vous aider à résoudre le problème que vous rencontrez (à partir de la page d'accueil du site Web de la Commission européenne). manuel version 9.5 ):

confiance

Autoriser la connexion sans condition. Cette méthode permet à toute personne qui peut se connecter au serveur de base de données PostgreSQL de se connecter en tant que n'importe quel PostgreSQL qu'ils souhaitent, sans avoir besoin d'un mot de passe ou d'une autre authentification. autre authentification. Voir la section 19.3.1 pour plus de détails.

rejeter

Rejeter 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 bloquer la connexion d'un hôte spécifique, alors qu'une ligne ultérieure permet aux les autres hôtes d'un réseau spécifique de se connecter.

md5

Exiger du client qu'il fournisse un mot de passe à double hachage MD5 pour l'authentification. 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. Puisque le mot de passe est envoyé en texte clair sur le réseau, cette méthode ne doit pas être utilisée 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 n'est disponible que pour les connexions TCP/IP uniquement. Voir la section 19.3.3 pour plus de détails.

sspi

Utilisez SSPI pour authentifier l'utilisateur. Cette option 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 l' serveur d'identification sur le client et vérifiez s'il correspond au nom d'utilisateur de la nom d'utilisateur de la base de données. L'authentification Ident ne peut être utilisée que sur des connexions TCP/IP. TCP/IP. Lorsqu'elle est spécifiée pour des connexions locales, l'authentification par les pairs 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 à la demande. et vérifiez s'il correspond au nom d'utilisateur de la base de données demandé. Ce site n'est disponible que pour les connexions locales. Voir la section 19.3.6 pour détails.

ldap

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

rayon

Authentifier en utilisant un serveur RADIUS. Voir la section 19.3.8 pour plus de détails.

certificat

Authentification à l'aide de certificats clients SSL. Voir la section 19.3.9 pour détails.

pam

Authentification à 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.

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

  1. Modifiez la ou les méthodes d'authentification définies dans votre système de gestion de l'information. pg_hba.conf pour trust , md5 ou password (en fonction de vos besoins de sécurité et de simplicité) pour les enregistrements de connexion locale que vous avez définis à cet endroit.

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

  3. Ne touchez pas aux paramètres de l'IDENT et créez des utilisateurs dans votre base de données pour l'IDENT. chaque utilisateur du système d'exploitation auquel vous voulez accorder l'accès. Si un utilisateur est déjà authentifié par le système d'exploitation et qu'il est connecté, PostgreSQL ne demandera pas d'authentification supplémentaire et accordera l'accès à cet utilisateur en fonction de ses privilèges (rôles). l'accès à cet utilisateur en fonction des privilèges (rôles) qui lui sont attribués dans la base de données. base de données. Il s'agit de la configuration par défaut.

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

5 votes

Pour moi, c'est la meilleure réponse. Lorsque vous connaissez toutes ces options, vous pouvez facilement modifier la configuration. Et surtout quand vous êtes sur une machine Dev, vous pouvez simplement mettre 'ident' pour toutes les entrées pour éviter de perdre votre temps. Merci

1 votes

Cela a été utile pour moi aussi. Dans mon cas, le fichier pg_hba.conf était défini sur peer, je l'ai changé en password. Notez qu'à partir d'une installation vanille, 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 depuis pdgadmin3 avec le nom d'utilisateur postgres et le mot de passe que vous avez défini.

1 votes

Et où se trouve ce fichier ? Je vous l'accorde, vous devrez peut-être faire une liste, car il ne semble pas y avoir de cohérence entre les versions. Je pense que je vais juste lancer find sur '/' .

48voto

boulder_ruby Points 6257

Il suffit d'ajouter le -h localhost c'était tout ce dont j'avais besoin pour travailler

0 votes

On sait pourquoi ça le répare ?

0 votes

Les valeurs par défaut de postgresql ne sont pas définies de manière raisonnable. Ils l'ont peut-être corrigé depuis, je ne sais pas. De toute évidence, l'url par défaut devrait être this_computer = 'http://localhost'

0 votes

Donc utiliser entièrement la commande "pg_dump -U postgres test -f test_1.sql -h localhost" a fonctionné pour moi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X