Ошибка аутентификации PG Peer
У меня есть пользователь с паролем, который соответствует указанному в 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)
Это ошибка
[email protected] ~/rails_projects/goodsounds.org $ rake db:create
FATAL: Peer authentication failed for user "goodsounds"
Вот мой 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
Ранее "доверие" выше было md5, но я изменил его, чтобы увидеть, поможет ли это.
Вот моя 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
Ответы
Ответ 1
"Точная аутентификация" означает, что он использует сокет unix и ожидает, что подключаемый пользователь unix будет иметь одно и то же имя пользователя unix в качестве имени пользователя postgresql.
Поскольку ваше местное имя пользователя unix равно funkdified
, и вы пытаетесь подключиться как пользователь goodsounds
к соединению сокета unix domain (local
), где ваш pg_hba.conf
указывает peer
аутентификацию, Pg правильно отклоняет ваш попытка соединения.
Это поведение по умолчанию для многих установок при использовании сокетов unix.
Вы можете:
- Подключитесь через TCP/IP, указав имя хоста в настройках подключения к базе данных;
- edit
pg_hba.conf
использовать md5
аутентификацию паролем вместо peer
аутентификации для unix-сокетов (тип соединения local
), поэтому Pg принимает аутентификацию пароля; или
- Соединитесь с именем пользователя PostgreSQL так же, как ваше имя пользователя unix, и создайте пользователя в PostgreSQL, если он еще не существует.
Смотрите документы для pg_hba.conf
и оставшуюся часть главы проверки подлинности клиента документации.
Обратите внимание, что изменения в pg_hba.conf
не вступают в силу немедленно, вы должны перезапустить или хотя бы перезагрузить PostgreSQL, чтобы перечитать его pg_hba.conf
.
О, также, если у вас установлено несколько версий PostgreSQL, у вас может быть libpq из одной версии и сервера из другого. В этом случае убедитесь, что место для unix-сокета, к которому подключается libpq по умолчанию, совпадает с сервером unix_socket_directories
или переопределяет его (например,) host=/tmp
в вашей строке подключения.
Ответ 2
Я столкнулся с той же проблемой на компьютере с Ubuntu, поэтому я удалил эту ошибку, выполнив несколько шагов.
Переключиться на пользователя postgres
$ sudo su - postgres
он запросит пароль и по умолчанию пароль postgres
После переключения пользователя на postgres откройте консоль psql
$ psql
поэтому проверьте версию postgres, если доступно несколько версий
psql=# select VERSION();
PostgreSQL 9.1.13 on x86_64-unk.... # so version is 9.1
Теперь откройте postgres user
vim /etc/postgresql/9.1/main/pg_hba.conf
9.1
- верхняя команда возврата версии
и заменить
local all postgres peer
в
local all postgres md5
Перезапустите службу
sudo service postgresql restart
я также пишу шаги в своем блоге
http://tarungarg402.blogspot.in/2014/10/set-up-postgresql-on-ubuntu.html
Ответ 3
Если "одноранговая аутентификация" не работает, попробуйте аутентификацию md5.
Чтобы указать хост, попробуйте что-то вроде этого:
psql -d <dbname> -U <username> -h <hostname>
или это:
psql -d <dbname> -U <username> -h <hostname> -W
Ответ 4
изменить/etc/postgresql/9.3/main/pg_hba.conf
# "local" is for Unix domain socket connections only
local all all peer
измените строку ниже, и она работает для меня
# "local" is for Unix domain socket connections only
local all all md5