Сообщение об ошибке Postgres: FATAL: аутентификация идентификатора не выполнена для пользователя "..."
Скажем, вы видите это сообщение:
FATAL: Ident authentication failed for user "..."
Каковы причины этого сообщения об ошибке?
6 ответов
Это означает, что Postgres пытается аутентифицировать пользователя, используя протокол Ident, и не может. Идентификационная аутентификация работает так:
- У вас есть роль базы данных 'foo' в базе данных 'db'
- Ваш
pg_hba.conf
файл (в/etc/postgres-something/main
) определяет "Ident" как протокол для подключения к базе данныхdb
для пользователей, подключающихся с определенных хостов - Имя пользователя Unix, устанавливающее соединение, - 'foo'
- Сервер Ident, работающий на компьютере, с которого подключается пользователь, подтверждает, что его имя пользователя действительно foo
Возможные причины и решения:
- На компьютере, с которого вы пытаетесь подключиться, не работает сервер Ident. Проверьте это, попытавшись подключиться к нему через порт 113. Если это не удается, установите сервер Ident (например,
sudo apt-get install oidentd
). - Существует сервер Ident, но нет роли базы данных, соответствующей имени, с которым вы пытаетесь соединиться ('foo' в приведенном выше примере). Так что создайте его, подключившись к базе данных с правами суперпользователя и сделайте
CREATE ROLE foo
, Или добавьте запись в/etc/postgresql/.../main/pg_ident.conf
, - Возможно, имя пользователя оболочки не соответствует роли базы данных. Вы можете проверить это, подключившись к серверу Ident во время соединения и указав правильные номера портов.
Может быть, вы на самом деле хотите соединиться с паролем, а не Ident. Изменить
pg_hba.conf
файл соответственно. Например, изменить:host all all 127.0.0.1/32 ident
в
host all all 127.0.0.1/32 md5
Не уверен насчет причин, но это исправило это для меня:
в pg_hba.conf
изменить на это:
хост все все 127.0.0.1/32 md5
Точная ошибка: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"
Для Centos 7 измените pg_hba.conf на ниже:
# 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 ident
host all all 127.0.0.1/32 md5
# IPv6 local connections:
#host all all ::1/128 ident
host all all ::1/128 trust
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local replication all peer
#host replication all 127.0.0.1/32 ident
#host replication all ::1/128 ident
В CentOS добавьте следующую строку в /var/lib/pgsql/9.3/data/pg_hba.conf
:
host all all 127.0.0.1/32 trust
И закомментируйте другие записи.
Конечно, этот параметр небезопасен, но если вы просто возитесь с такой виртуальной машиной разработки, как я, то, вероятно, все в порядке...
Если вы еще этого не пробовали, просмотрите файл pg_hba.conf. Он будет назван примерно так: /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); вам, возможно, придется использовать 'find / -name pg_hba.conf', чтобы найти его.
В нижней части файла измените значения "МЕТОД" на "доверие" для локального тестирования (для получения полной информации см. Документацию postgres). Перезагрузите машину, чтобы убедиться, что все запущено и все новые параметры прочитаны.
Надеюсь, это вылечит ваши беды. Это решило мои проблемы на Fedora 20 с PostgreSQL 9.3.