Question Obtenir l'erreur: l'authentification par les pairs a échoué pour l'utilisateur "postgres", en essayant de faire fonctionner pgsql avec des rails


Je suis en train

FATAL: Peer authentication failed for user "postgres"

quand j'essaie de faire fonctionner postgres avec Rails.

Voici mon pg_hba.conf, mon database.ymlet 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 base de données selon 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 quand je cours sudo -u postgres psql -l

Une idée d'où je vais mal?


485
2017-09-06 18:15


origine


Réponses:


Le problème est toujours votre pg_hba.conf fichier (/etc/postgresql/9.1/main/pg_hba.conf). Cette ligne:

local   all             postgres                                peer

Devrait être

local   all             postgres                                md5

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

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

Authentification par les pairs

La méthode d'authentification par les pairs fonctionne en obtenant le client   nom d'utilisateur du système d'exploitation du noyau et en l'utilisant comme autorisation   nom d'utilisateur de base de données (avec mappage de nom d'utilisateur facultatif). Cette méthode est   uniquement pris 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. Celles-ci   méthodes fonctionnent de manière similaire, sauf pour la façon dont le mot de passe est envoyé   à travers la connexion, à savoir MD5-hashed et clear-text respectivement.

Si vous êtes préoccupé par le mot de passe "sniffing" des attaques, alors md5   est préféré. 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   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 l'on dépend de l'utilisation de SSL).

Emplacement de l'échantillon pour pg_hba.conf

/etc/postgresql/9.1/main/pg_hba.conf


696
2017-09-06 18:25



Après avoir installé Postgresql, j'ai fait les étapes ci-dessous.

  1. ouvrir le fichier pg_hba.conf pour Ubuntu ce sera dans /etc/postgresql/9.x/main et changez cette ligne:
local tous les pairs de postgres

à

local toute confiance postgres
  1. Redémarrez le serveur
sudo service postgresql restart
  1. Connectez-vous à psql et définissez votre mot de passe

psql -U postgres

ALTER USER postgres with password 'your-pass';
  1. Enfin changer le pg_hba.conf de
local toute confiance postgres

à

local tous les 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 pouvant se connecter au serveur est autorisée à accéder à la base de données

pair - utilise 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 référence ultérieure vérifier ici


241
2017-11-04 12:25



Si vous vous connectez via localhost (127.0.0.1), vous ne devriez pas rencontrer ce problème particulier. Je ne voudrais pas beaucoup muck avec le pg_hba.conf mais à la place je voudrais ajuster votre chaîne de connexion:

psql -U someuser -h 127.0.0.1 database

Où someuser est votre utilisateur, vous vous connectez en tant que et la base de données est la base de données à laquelle votre utilisateur est autorisé à 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

Prendre plaisir!


124
2018-02-28 15:51



Cela a fonctionné pour moi !!

sudo -u postgres psql

17
2018-01-10 07:39



  1. Allez à ceci /etc/postgresql/9.x/main/ et ouvert pg_hba.conf fichier

Dans mon cas:

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. Remplacer pair avec md5

Donc, ce sera changé pour:

Connexion administrative de base de données par socket de domaine Unix     local tous les pairs de postgres

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5

Ce:

Connexion administrative de base de données par socket de domaine Unix     local tous les postgres md5

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
  1. Puis redémarrez le serveur pg:

    $> sudo service postgresql restart

Voici la liste des méthodes utilisées pour se connecter à postgres:

# METHOD can be "trust", "reject", "md5", "password", "gss", "sspi",
# "krb5", "ident", "peer", "pam", "ldap", "radius" or "cert".  Note that
# "password" sends passwords in clear text; "md5" is preferred since
# it sends encrypted passwords.

Remarque: Si vous n'avez pas encore créé l'utilisateur postgres. Créez cela et maintenant vous pouvez accéder au serveur postgres en utilisant ces informations d'identification.


14
2017-09-10 11:29



Si vous avez un problème, vous devez localiser votre pg_hba.conf

find / -name 'pg_hba.conf' 2>/dev/null

et changez le fichier de configuration:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

Après cela, vous devez redémarrer le service postgresql

Exemple pour postgresql 9.3

service postgresql-9.3 restart

Si vous avez des problèmes, vous devez redéfinir le mot de passe:

ALTER USER db_user with password 'db_password';


12
2018-04-08 14:24



J'ai eu le même problème.

La solution de depa est absolument correcte.

Assurez-vous simplement qu'un utilisateur est configuré pour utiliser PostgreSQL.

Vérifiez le fichier:

$ ls /etc/postgresql/9.1/main/pg_hba.conf -l

La permission de ce fichier doit être donnée à l'utilisateur avec lequel vous avez enregistré votre psql.

Plus loin. Si vous êtes bon jusqu'à maintenant ..

Mettre à jour selon les instructions de @ depa.

c'est à dire.

$ sudo nano /etc/postgresql/9.1/main/pg_hba.conf

puis faites des changements.


10
2017-10-14 02:25