web-dev-qa-db-fra.com

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
28
Abram

"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 utiliser md5 authentification par mot de passe au lieu de peer 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.

88
Craig Ringer

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

15
Tarun Garg

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
9
user3546709

é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
1
Sanjay Salunkhe