894 votes

Obtention d'une erreur : Peer authentication failed for user "postgres", lorsque l'on essaie de faire fonctionner pgsql avec rails.

Je reçois l'erreur :

FATAL: Peer authentication failed for user "postgres"

quand j'essaie de faire fonctionner postgres avec Rails.

Voici mon pg_hba.conf , mon database.yml et un vidage de la trace complète .

J'ai changé l'authentification en md5 dans pg_hba et essayé différentes choses, mais aucune ne semble fonctionner.

J'ai également essayé de créer un nouvel utilisateur et une nouvelle base de données comme indiqué dans le tableau ci-dessous. Rails 3.2, FATAL : L'authentification par les pairs a échoué pour l'utilisateur (PG::Error)

Mais ils n'apparaissent pas sur pgadmin ou même lorsque j'exécute le programme. sudo -u postgres psql -l .

Vous savez où je me trompe ?

1 votes

1) : Assurez-vous que vous avez créé un utilisateur nommé "postgres" et que vous avez les droits sur votre base de données. 2) : Assurez-vous qu'il a un mot de passe 3) : Assurez-vous que votre config/database.yml contient les informations d'identification des droits (nom d'utilisateur + mot de passe).

2 votes

Il faut que chaque endroit soit pair et que l'indentation soit réglée sur md5

18 votes

Voir également cette réponse - la connexion peut échouer sur localhost mais réussissent sur 127.0.0.1 .

1228voto

depa Points 8192

Le problème est toujours votre pg_hba.conf fichier*.

Cette ligne :

local   all             postgres                                peer

Ça devrait l'être :

local   all             postgres                                md5

* L'emplacement de ce fichier n'est pas très cohérent. La commande locate pg_hba.conf devrait vous aider ; voici quelques exemples : /etc/postgresql/*/main/pg_hba.conf y /var/lib/pgsql/data/pg_hba.conf .

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

Il s'agit d'une brève description des deux options en fonction de l'objectif de l'UE. 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 du noyau le nom d'utilisateur du système d'exploitation du client. du client et en l'utilisant comme nom d'utilisateur de la base de données nom d'utilisateur de la base de données (avec mappage facultatif du nom d'utilisateur). Cette méthode n'est Cette méthode n'est prise en charge que pour les connexions locales.

Authentification par mot de passe

Les méthodes d'authentification basées sur un mot de passe sont md5 et password. Ces méthodes fonctionnent de manière similaire, à l'exception de la façon dont le mot de passe est envoyé à travers la connexion, à savoir MD5-hashed et clear-text respectivement.

Si vous êtes un tant soit peu préoccupé par les attaques de "reniflage" de mot de passe, alors md5 est préférable. Les mots de passe en clair doivent toujours être évités si possible. Cependant, md5 ne peut pas être utilisé avec la fonction db_user_namespace. Si la connexion est protégée par un cryptage SSL, alors 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 compte utiliser SSL).

Emplacement de l'échantillon pour pg_hba.conf :
/etc/postgresql/9.1/main/pg_hba.conf

62 votes

Vous devrez recharger votre service postgresql après avoir changé ceci /etc/init.d/postgresql reload

80 votes

Je mets ceci ici car j'oublie toujours où se trouve ce fichier /etc/postgresql/9.1/main/pg_hba.conf

13 votes

@funkotron Au moins sur mon installation ElementaryOS (Ubuntu), sudo service postgreql restart fonctionne également.

485voto

arivarasan Points 965

Après avoir installé Postgresql, j'ai effectué les étapes suivantes.

  1. ouvrir le fichier pg_hba.conf pour Ubuntu, il sera dans /etc/postgresql/9.x/main et changez cette ligne :

    local   all             postgres                                peer

    à

    local   all             postgres                                trust
  2. Redémarrer le serveur

    $ sudo service postgresql restart
  3. Connectez-vous à psql et définissez votre mot de passe

    $ psql -U postgres
    db> ALTER USER postgres with password 'your-pass';
  4. Enfin, changez le pg_hba.conf de

    local   all             postgres                                trust

    à

    local   all             postgres                                md5

Après avoir redémarré le serveur postgresql, vous pouvez y accéder avec votre propre mot de passe.

Détails des méthodes d'authentification :

confiance - toute personne qui peut se connecter au serveur est autorisée à accéder à la base de données

peer - utiliser le nom d'utilisateur du système d'exploitation du client comme nom d'utilisateur de la base de données pour y accéder.

md5 - authentification par mot de passe

pour plus d'informations Vérifiez ici

29 votes

Changer la méthode en "confiance" a fonctionné pour moi. +1 pour l'explication des détails de la méthode d'authentification.

7 votes

Sur OS X homebrew, la valeur par défaut est la confiance, tandis que sur Ubuntu, la valeur par défaut est "peer", ce qui a conduit à des divergences entre ma configuration et celle de mon collègue. Nous avons changé la sienne en MD5, ce qui n'a pas aidé, donc "trust" est la vraie réponse ici (nous ne faisons que des tests de développement). Devrait obtenir plus de votes positifs.

2 votes

Vous pouvez également définir le md5 partout dès le début.

275voto

StylusEater Points 3044

Si vous vous connectez via localhost (127.0.0.1), vous ne devriez pas rencontrer ce problème particulier. Je ne modifierais pas beaucoup le fichier pg_hba.conf, mais j'ajusterais plutôt votre chaîne de connexion :

psql -U someuser -h 127.0.0.1 database

où someuser est l'utilisateur sous lequel vous vous connectez et database est la base de données à laquelle votre utilisateur a la permission de se connecter.

Voici ce que je fais sur Debian pour configurer postgres :

http://www.postgresql.org/download/linux/debian/  (Wheezy 7.x)

as root …

    root@www0:~# echo "deb http://apt.postgresql.org/pub/repos/apt/ wheezy-pgdg main" >> /etc/apt/sources.list

    root@www0:~# wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add -

    root@www0:~# apt-get update

    root@www0:~# apt-get install postgresql-9.4        

    root@www0:~# su - postgres 

    postgres@www0:~$ createuser --interactive -P someuser
    Enter password for new role:
    Enter it again:
    Shall the new role be a superuser? (y/n) n
    Shall the new role be allowed to create databases? (y/n) y
    Shall the new role be allowed to create more new roles? (y/n) n

    postgres@www0:~$ createdb -O someuser database

    postgres@www0:~$ psql -U someuser -h 127.0.0.1 database

Profitez-en !

81voto

iamuser2 Points 221

Cela a marché pour moi !

sudo -u postgres psql

26voto

Gihan Gamage Points 411
sudo psql --host=localhost --dbname=database-name --username=postgres

Cela a résolu mon problème

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