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?
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" authentificationla 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
après avoir installé Postgresql j'ai fait les étapes ci-dessous.
- 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
- redémarrer le serveur
sudo service postgresql restart
- connectez-vous à psql et définissez votre mot de passe
psql-U postgres
ALTER USER postgres with password 'your-pass';
- 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
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!
- 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
- 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
-
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.
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.4
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';
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.
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
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
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=#
utiliser host=localhost
en connexion.
PGconn *conn = PQconnectdb(
"host=localhost user=postgres dbname=postgres password=123"
);
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 .
la commande ci-dessous fonctionne pour moi:
psql -d myDb -U username -W
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.
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!
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é.
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
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