web-dev-qa-db-fra.com

Erreur: authentification homologue échouée pour l'utilisateur "postgres" lors de la tentative d'utilisation de 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 j'ai 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 selon Rails 3.2, FATAL: l'authentification entre homologues a échoué pour l'utilisateur (PG :: Error)

Mais ils n'apparaissent pas sur pgadmin ni même lorsque je lance _Sudo -u postgres psql -l_.

Une idée où je vais mal?

641
orderof1

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, lancer locate pg_hba.conf devrait vous montrer 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 docs officiels de PostgreSQL sur les méthodes d'authentification .

Authentification par les pairs

La méthode d'authentification entre homologues consiste à obtenir le nom d'utilisateur du système d'exploitation du client auprès du noyau et à l'utiliser comme nom d'utilisateur de base de données autorisé (avec mappage facultatif du nom d'utilisateur). Cette méthode est uniquement prise 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. Ces méthodes fonctionnent de manière similaire, à l'exception de la manière dont le mot de passe est envoyé via la connexion, à savoir MD5-hashed et clear-text, respectivement.

Si vous êtes préoccupé par les attaques par "reniflement" par 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 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 vous utilisez SSL).

Exemple d’emplacement pour pg_hba.conf:
/etc/postgresql/9.1/main/pg_hba.conf

904
depa

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

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

à

local tout confiance postgres
  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. Enfin changez le pg_hba.conf de
local tout confiance postgres

à

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

peer - 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 cochez ici

306
Arivarasan L

Si vous vous connectez sur localhost (127.0.0.1), vous ne devriez pas rencontrer ce problème particulier. Je ne mettrais pas beaucoup de choses dans le fichier pg_hba.conf, mais je voudrais plutôt ajuster votre chaîne de connexion:

psql -U someuser -h 127.0.0.1 database

où someuser est votre utilisateur auquel vous vous connectez et base de données est la base de données à laquelle l'utilisateur est autorisé à se connecter.

Voici ce que je fais sur Debian pour installer 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!

176
StylusEater

Cela a fonctionné pour moi !!

Sudo -u postgres psql
33
iamuser2

Si vous rencontrez un problème, vous devez localiser votre pg_hba.conf. La commande est:

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

et après cela change le fichier de configuration:

Postgresql 9.3

Postgresql 9.3

Postgresql 9.4

Postgresql 9.3

La prochaine étape consiste à: Redémarrer votre instance de base de données:

service postgresql-9.3 restart

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

ALTER USER db_user with password 'db_password';

15
d.danailov
  1. Allez dans ce fichier / etc/postgresql/9.x/main / et ouvrez le fichier pg_hba.conf

Dans mon cas:

$>  Sudo nano /etc/postgresql/9.3/main/pg_hba.conf
  1. Remplacez homologue par md5

Donc, cela deviendra:

Connexion administrative à la base de données par le socket de domaine Unix local tous les homologues 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

This:

Connexion administrative à la base de données par le 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:

    $> Redémarrage postgresql du service Sudo

Ci-dessous 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.

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

TIP: Si cela ne fonctionne pas après le redémarrage de Postgres, fermez le terminal et ouvrez-le à nouveau.

15
Taimoor Changaiz

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

La solution de depa est absolument correcte.

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

Vérifiez le fichier:

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

L'autorisation 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

et ensuite apporter des modifications.

10
nirvanastack

Si vous souhaitez conserver la configuration par défaut tout en souhaitant une authentification md5 avec une connexion socket pour une connexion utilisateur/base de données spécifique, ajoutez une ligne "locale" AVANT la ligne "local tout/tout":

# 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
7
Åsmund

Je déplaçais le répertoire de données sur un serveur cloné et rencontrais des difficultés pour me connecter en tant que postgres. Réinitialiser le mot de passe postgres comme ceci a fonctionné 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
Luca Marletta

Utilisez Host=localhost en connexion.

PGconn *conn = PQconnectdb(
    "Host=localhost user=postgres dbname=postgres password=123"
);
6
Manisha Vasani

Les modifications ci-dessus ont fonctionné pour moi, après avoir compris que je devais redémarrer le serveur postgres après les avoir créées. Pour Ubuntu:

Sudo /etc/init.d/postgresql restart
6
sibosop
Sudo psql --Host=localhost --dbname=database-name --username=postgres

Cela a résolu mon problème

6
Gihan Gamage

la commande ci-dessous fonctionne pour moi:

psql -d myDb -U username -W
5
Mazen Ora

Changer de METHOD pair à confiance dans pg_hba.conf (/etc/postgresql/9.1/main/pg_hba.conf | line 85) résout le problème. L'ajout de md5 demande un mot de passe. Par conséquent, s'il est impératif d'éviter d'utiliser des mots de passe, utilisez confiance au lieu de md5.

5
Supun Muthutantrige

Vous devez simplement définir METHOD pour faire confiance.

#TYPE  DATABASE        USER            ADDRESS                 METHOD
local    all             all                                     trust

Et recharger le serveur postgres.

# service postgresql-9.5 reload

Les changements dans pg_hba.conf ne nécessitent pas le serveur postgres RESTART. RELOAD.

3
Alexandr Zaichenko

La plupart des autres réponses concernent les paramètres des différents fichiers de configuration, et celles concernant le pg_hba.conf s'appliquent et sont correctes à 100%. Cependant, assurez-vous que vous êtes en modifiant les fichiers de configuration appropriés.

Comme d'autres l'ont mentionné, les emplacements des fichiers de configuration peuvent être remplacés par divers paramètres dans le fichier de configuration principal, ainsi que pour fournir un chemin d'accès au fichier de configuration principal sur la ligne de commande avec l'option -D.

Vous pouvez utiliser la commande suivante pendant une session psql pour indiquer où vos fichiers de configuration sont lus (en supposant que vous puissiez lancer psql). Ceci 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 de base de votre utilisateur postgres est celui que vous souhaitez. Je dis cela car il est assez facile de l'ignorer car votre invite affichera '~' 'au lieu du chemin réel de votre répertoire personnel, ce qui le rend moins évident. De nombreuses installations par défaut du répertoire personnel de l'utilisateur postgres sont définies sur /var/lib/pgsql.

Si ce n'est pas le cas, 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 session:

usermod -d /path/pgsql postgres

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

/path/pgsql/data

S'il n'est pas défini ou affiche quelque chose de différent de ce que vous attendez, examinez vos fichiers de démarrage ou RC tels que .profile ou .bash.rc. Cela varie grandement en fonction de votre système d'exploitation et de votre shell. Une fois que vous avez déterminé le script de démarrage correct pour votre ordinateur, vous pouvez insérer les éléments suivants:

export PGDATA=/path/pgsql/data

Pour mon système, je l'ai placé dans /etc/profile.d/profile.local.sh afin qu'il soit accessible à tous les utilisateurs.

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

3
Bill

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 pour éditer/insérer, appuyez sur ESC 3 fois et tapez :wq pour enregistrer le fichier et quitter.

2
Marshall

Si vous faites face à ce problème avec Rails et que vous savez que vous avez déjà créé ce nom d'utilisateur avec mot de passe avec les droits corrects, il vous suffit de mettre ce qui suit à la fin de votre fichier database.yml.

Host: localhost

fichier global 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 toucher votre fichier pg_hba.conf. Bonne codage

2
ImranNaqvi

Mon problème était que je n'ai pas tapé de serveur. Je pensais que c'était un défaut à cause de l'espace réservé, mais quand j'ai tapé localhost, cela a fonctionné.

2
Epsilon47