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?
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 .
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.
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
Après avoir installé Postgresql, j'ai suivi les étapes ci-dessous.
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
Sudo service postgresql restart
psql -U postgres
ALTER USER postgres with password 'your-pass';
pg_hba.conf
delocal 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
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!
Cela a fonctionné pour moi !!
Sudo -u postgres psql
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.4
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';
Dans mon cas:
$> Sudo nano /etc/postgresql/9.3/main/pg_hba.conf
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
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.
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.
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
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=#
Utilisez Host=localhost
en connexion.
PGconn *conn = PQconnectdb(
"Host=localhost user=postgres dbname=postgres password=123"
);
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
Sudo psql --Host=localhost --dbname=database-name --username=postgres
Cela a résolu mon problème
la commande ci-dessous fonctionne pour moi:
psql -d myDb -U username -W
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.
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.
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!
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.
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
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é.