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

Im

FATAL: Peer authentication failed for user "postgres"

quand j'essaie de faire fonctionner postgres avec des Rails.

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

j'ai changé d'authentification 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 la base de données selon Rails 3.2, FATAL: échec de l'authentification par les pairs pour l'utilisateur (PG: erreur)

mais ils n'apparaissent pas sur pgadmin ou même quand je cours sudo -u postgres psql -l

vous savez où je vais mal?

504
demandé sur Nathan Smith 2013-09-06 22:15:06

18 réponses

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

local   all             postgres                                peer

devrait être

local   all             postgres                                md5

* si vous ne trouvez pas ce fichier, l'exécution de locate pg_hba.conf devrait vous indiquer où se trouve le fichier.

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 .

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

"1519180920 par les Pairs" authentification

la méthode d'authentification par les pairs fonctionne en obtenant le nom d'utilisateur du système d'exploitation à partir du noyau et en l'utilisant comme le nom d'utilisateur de la base de données (avec possibilité de mappage du nom d'utilisateur). Cette méthode est pris en charge uniquement 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. Ils méthodes fonctionnent de la même façon, 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éré. Le mot de passe simple doit toujours être évité si possible. Cependant, md5 ne peut pas être utilisé avec fonction db_user_namespace. Si l' la connexion est protégée par le cryptage SSL puis le mot de passe peut être utilisé en toute sécurité (bien que L'authentification des certificats 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

732
répondu depa 2018-08-06 03:31:06

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

  1. ouvrir le fichier pg_hba.conf Pour Ubuntu il sera dans /etc/postgresql/9.x/main et changer cette ligne:
local   all             postgres                                peer

à

local   all             postgres                                trust
  1. redémarrer 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. changer finalement 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 sur les méthodes d'authentification:

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

par les pairs-utilisez 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 du mot de passe de la base de l'authentification

de référence consultez ici les

245
répondu Arivarasan L 2016-02-05 13:34:54

si vous vous connectez sur localhost (127.0.0.1) vous ne devriez pas éprouver ce problème particulier. Je ne ferais pas grand-chose avec la pg_hba.conf mais à la place je réglerais votre chaîne de connexion:

psql -U someuser -h 127.0.0.1 database

où someuser est votre utilisateur, vous vous connectez comme et la base de données 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!

131
répondu StylusEater 2016-07-01 10:41:02

ça a marché pour moi !!

sudo -u postgres psql
18
répondu iamuser2 2018-01-10 07:39:13
  1. Aller à cette /etc/postgresql/9.x/main/ et ouvrir pg_hba.conf fichier

dans mon cas:

$>  sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. remplacer peer par md5

donc ce sera changé en:

connexion administrative de la base de données par domaine Unix socket local tous Postgres peer

# 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

:

connexion administrative de la base de données par socket de domaine Unix local tous les postgres md5 1519130920"

# 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 pg server:

    $ > sudo service postgresql restart

ci-dessous est la liste des méthodes utilisées pour se connecter avec 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.

Note: si vous n'avez pas encore créé votre Postgres user. Créez cela et maintenant vous pouvez accéder au serveur postgres en utilisant les informations d'identification de l'utilisateur.

14
répondu Taimoor Changaiz 2015-09-10 11:29:37

si vous avez un problème, vous devez trouver votre pg_hba.conf . La commande est:

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

et ensuite changer le fichier de configuration:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

la prochaine étape est: redémarrer votre base de données exemple:

service postgresql-9.3 restart

si vous avez des problèmes, vous devez définir mot de passe à nouveau:

ALTER USER db_user with password 'db_password';

13
répondu d.danailov 2018-09-22 07:48:40

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

la solution de depa est absolument correcte.

assurez-vous que vous avez un utilisateur configuré pour utiliser PostgreSQL.

Vérifier le fichier:

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

L'autorisation de ce fichier doit être donnée à l'utilisateur que vous avez enregistré votre psql.

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

mise à jour selon @depa instruction.

c'est à dire

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

et puis faire des changements.

10
répondu nirvanastack 2013-10-14 02:25:57

les modifications ci-dessus ont fonctionné pour moi, après que j'ai compris que j'avais besoin de redémarrer le serveur postgres après les avoir faites. Pour ubuntu:

sudo /etc/init.d/postgresql restart
6
répondu sibosop 2015-08-25 21:42:51

si vous voulez conserver la configuration par défaut mais que vous voulez une authentification md5 avec connexion socket pour une connexion utilisateur/db spécifique, ajoutez une ligne "locale" avant la ligne "local all / all":

# TYPE  DATABASE     USER         ADDRESS             METHOD

# "local" is for Unix domain socket connections only
local   username     dbname                           md5  # <-- this line
local   all          all                              peer
# IPv4 local connections:
host    all          all          127.0.0.1/32        ident
# IPv6 local connections:
host    all          all          ::1/128             ident
6
répondu Åsmund 2016-08-10 12:11:15

Je déplaçais le répertoire de données sur un serveur cloné et j'avais des problèmes pour me connecter en tant que postgres. Réinitialiser le mot de passe postgres comme ça a marché pour moi.

root# su postgres postgres$ psql -U postgres psql (9.3.6) Type "help" for help. postgres=#\password Enter new password: Enter it again: postgres=#

6
répondu Luca Marletta 2016-09-27 14:43:04

utiliser host=localhost en connexion.

PGconn *conn = PQconnectdb(
    "host=localhost user=postgres dbname=postgres password=123"
);
6
répondu Manisha Vasani 2017-11-15 17:57:11

Changement de MÉTHODE par les pairs à confiance dans pg_hba.conf (/etc/postgresql/9.1/main / pg_hba.conf | ligne 85) résout le problème. Ajouter md5 demande un mot de passe, donc s'il y a une exigence pour éviter d'utiliser des mots de passe, utiliser trust au lieu de md5 .

5
répondu Supun Muthutantrige 2017-02-03 05:40:44

la commande ci-dessous fonctionne pour moi:

psql -d myDb -U username -W
4
répondu Mazen Ora 2015-03-16 10:27:10

il vous suffit de définir la méthode de confiance.

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

et recharger le serveur postgres.

# service postgresql-9.5 reload

changements dans pg_hba.conf ne nécessite pas le redémarrage du serveur postgres. RECHARGEZ simplement.

3
répondu Alexandr Zaichenko 2016-06-14 13:11:02

beaucoup d'autres réponses se rapportent à des réglages dans les différents fichiers de configuration, et celles relatives au pg_hba.conf s'appliquent et sont correctes à 100%. Cependant, assurez-vous que vous êtes modifiant les fichiers de configuration .

comme d'autres l'ont mentionné, les emplacements des fichiers de configuration peuvent être dépassés avec divers réglages à l'intérieur du fichier de configuration principal, ainsi que la fourniture d'un chemin vers le fichier de configuration principal sur la ligne de commande avec le -D option.

vous pouvez utiliser la commande suivante pendant une session psql pour montrer où vos fichiers de configuration sont lus (en supposant que vous pouvez lancer psql). C'est juste une étape de dépannage qui peut aider certaines personnes:

select * from pg_settings where setting~'pgsql';  

Vous devez également vous assurer que le répertoire home de votre utilisateur postgres est l'endroit où vous l'attendez. Je dis cela parce qu'il est assez facile de négliger ce dû au fait que votre invite de affichez ' ~ ' au lieu du chemin réel de votre répertoire personnel, ce qui le rend moins évident. De nombreuses installations utilisent par défaut le répertoire des utilisateurs de postgres comme /var/lib/pgsql .

si elle n'est pas définie à ce qu'elle est supposée être, arrêtez le service postgresql et utilisez la commande suivante lorsque vous êtes connecté en tant que root. Assurez-vous également que l'utilisateur postgres n'est pas connecté à une autre séance:

usermod -d /path/pgsql postgres

Enfin, assurez-vous que votre variable PGDATA est définie correctement en tapant echo $PGDATA , qui devrait produire quelque chose similaire à:

/path/pgsql/data

si elle n'est pas définie, ou montre quelque chose de différent de ce que vous attendez qu'elle soit, examinez votre démarrage ou fichiers RC tels que .de profil ou de .bash.rc - cela varie beaucoup selon votre OS et votre shell. Une fois que vous avez déterminé le bon script de démarrage pour votre machine, vous pouvez insérer ce qui suit:

export PGDATA=/path/pgsql/data

pour mon système, j'ai placé ceci dans /etc/profile.d/profile.local.sh donc il était accessible pour tous les utilisateurs.

vous devriez maintenant être en mesure d'initialiser la base de données comme d'habitude et tous vos paramètres de chemin psql devraient être corrects!

3
répondu Bill 2017-11-20 20:34:51

mon problème était que je n'ai pas tapé de serveur. J'ai pensé que c'était un défaut à cause de placeholder mais quand j'ai tapé localhost cela a fonctionné.

2
répondu Epsilon47 2018-01-12 12:25:53

si vous essayez de localiser ce fichier dans Cloud 9, Vous pouvez le faire""

sudo vim /var/lib/pgsql9/data/pg_hba.conf

Appuyez sur I edition/insérer, appuyez sur ESC 3 fois et tapez :wq enregistre le fichier et quitter

2
répondu Marshall 2018-01-29 19:17:04

si vous êtes confrontés à ce problème avec les rails et que vous savez que vous avez déjà créé ce nom d'utilisateur avec mot de passe avec les droits corrects, alors vous avez juste besoin de mettre la suite à la fin de votre base de données.fichier yml.

host: localhost

l'ensemble du fichier ressemblera à ci-dessous

development:
  adapter: postgresql
  encoding: unicode
  database: myapp_development
  pool: 5
  username: root
  password: admin
  host: localhost

Vous n'avez pas besoin de vous toucher "151920920 de fichier". Heureux de codage

1
répondu ImranNaqvi 2018-06-04 19:11:54