L'authentification PG Peer a échoué
J'ai un utilisateur avec un mot de passe correspondant à celui spécifié dans database.yml
postgres=# select * from pg_user
;
usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valuntil | useconfig
------------+----------+-------------+----------+-----------+---------+----------+----------+-----------
goodsounds | 16386 | t | t | t | t | ******** | |
postgres | 10 | t | t | t | t | ******** | |
(2 rows)
C'est l'erreur
funkdified@vizio ~/Rails_projects/goodsounds.org $ rake db:create
FATAL: Peer authentication failed for user "goodsounds"
Voici mon pg_hba.conf:
# Database administrative login by Unix domain socket
local all 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 trust
# IPv6 local connections:
Host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication postgres peer
#Host replication postgres 127.0.0.1/32 trust
#Host replication postgres ::1/128 trust
Auparavant, la "confiance" ci-dessus était md5 mais j'ai changé pour voir si cela aiderait.
Voici mon database.yml:
# PostgreSQL. Versions 8.2 and up are supported.
#
# Install the pg driver:
# gem install pg
# On Mac OS X with macports:
# gem install pg -- --with-pg-config=/opt/local/lib/postgresql84/bin/pg_config
# On Windows:
# gem install pg
# Choose the win32 build.
# Install PostgreSQL and put its /bin directory on your path.
#
# Configure Using Gemfile
# gem 'pg'
#
development:
adapter: postgresql
encoding: unicode
database: goodsounds_development
pool: 5
username: goodsounds
password: test
# Connect on a TCP socket. Omitted by default since the client uses a
# domain socket that doesn't need configuration. Windows does not have
# domain sockets, so uncomment these lines.
Host: localhost
port: 5432
# Schema search path. The server defaults to $user,public
#schema_search_path: myapp,sharedapp,public
# Minimum log levels, in increasing order:
# debug5, debug4, debug3, debug2, debug1,
# log, notice, warning, error, fatal, and panic
# The server defaults to notice.
#min_messages: warning
# Warning: The database defined as "test" will be erased and
# re-generated from your development database when you run "rake".
# Do not set this db to the same as development or production.
test:
adapter: postgresql
encoding: unicode
database: goodsounds_test
pool: 5
username: goodsounds
password: test
production:
adapter: postgresql
encoding: unicode
database: goodsounds_production
pool: 5
username: goodsounds
password: test
"Authentification par les pairs" signifie qu'il utilise un socket Unix et attend de l'utilisateur unix connecté que son nom d'utilisateur soit identique à celui de postgresql.
Puisque votre nom d'utilisateur unix local est funkdified
et que vous essayez de vous connecter en tant qu'utilisateur goodsounds
via une connexion socket de domaine Unix (local
) où votre pg_hba.conf
spécifie l'authentification peer
, Pg refuse correctement votre tentative de connexion.
C'est le comportement par défaut pour de nombreuses installations lors de l'utilisation de sockets unix.
Vous pouvez:
- Connectez-vous via TCP/IP en spécifiant un nom d'hôte dans les paramètres de connexion de votre base de données.
- éditer
pg_hba.conf
pour utilisermd5
authentification par mot de passe au lieu depeer
authentification pour les sockets unix (local
type de connexion) afin que Pg accepte l'authentification par mot de passe; ou - Connectez-vous avec un nom d'utilisateur PostgreSQL identique à votre nom d'utilisateur unix et créez l'utilisateur dans PostgreSQL s'il n'existe pas encore.
Voir la documentation pour pg_hba.conf
et le reste du chapitre sur l’authentification du client de la documentation .
Notez que les modifications apportées à pg_hba.conf
ne prennent pas effet immédiatement, vous devez redémarrer ou au moins recharger PostgreSQL pour le relire pg_hba.conf
.
Oh, aussi, si vous avez plusieurs versions de PostgreSQL installées, vous pouvez avoir un libpq d’une version et un serveur d’une autre. Dans ce cas, assurez-vous que l'emplacement du socket Unix auquel libpq se connecte par défaut est identique à celui du serveur unix_socket_directories
ou remplacez-le par (par exemple) Host=/tmp
dans votre chaîne de connexion.
J'étais confronté au même problème sur la machine Ubuntu, j'ai donc supprimé cette erreur en suivant certaines étapes. Basculer vers l'utilisateur postgres
$ Sudo su - postgres
il vous demandera un mot de passe et le mot de passe par défaut est postgres
Après avoir basculé l'utilisateur sur postgres, ouvrez la console psql
$ psql
alors vérifiez la version de postgres si plusieurs versions sont disponibles
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
Maintenant ouvert postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
9.1
est la version supérieure du formulaire de commande
et remplacer
local all postgres peer
à
local all postgres md5
Sudo service postgresql restart
J'écris aussi des étapes sur mon blog
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
Si "l'authentification par les pairs" ne fonctionne pas, essayez l'authentification md5.
Pour spécifier l'hôte, essayez quelque chose comme ceci:
psql -d <dbname> -U <username> -h <hostname>
ou ca:
psql -d <dbname> -U <username> -h <hostname> -W
éditez /etc/postgresql/9.3/main/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all peer
changer en dessous de la ligne et cela fonctionne pour moi
# "local" is for Unix domain socket connections only
local all all md5