Назад | Перейти на главную страницу

Сообщение об ошибке Postgres: FATAL: идентификационная проверка не удалась для пользователя «…»

Допустим, вы видите это сообщение:

FATAL:  Ident authentication failed for user "..."

Каковы причины этого сообщения об ошибке?

Это означает, что Postgres пытается аутентифицировать пользователя с использованием протокола Ident и не может. Идентификационная аутентификация работает так:

  • У вас есть роль базы данных 'foo' в базе данных 'db'
  • Ваш pg_hba.conf файл (в /etc/postgres-something/main) определяет Ident как протокол для подключения к базе данных db для пользователей, подключающихся с определенных хостов
  • Имя пользователя unix, устанавливающее соединение, - 'foo'
  • Сервер идентификации, работающий на машине, с которой подключается пользователь, подтверждает, что его имя пользователя действительно 'foo'

Возможные причины и решения:

  1. Там есть нет идентификационного сервера работает на машине, с которой вы пытаетесь подключиться. Проверьте это, попытавшись подключиться к нему через порт 113. Если это не удается, установите сервер идентификации (например, sudo apt-get install oidentd).
  2. Идентификационный сервер есть, но есть нет роли базы данных соответствует имени, с которым вы пытаетесь подключиться ('foo' в приведенном выше примере). Так что создайте его, подключившись как-нибудь к базе данных с правами суперпользователя, и выполните CREATE ROLE foo. Или добавьте запись в /etc/postgresql/.../main/pg_ident.conf (или /var/lib/pgsql/12/data или где угодно).

  3. Может быть, имя пользователя оболочки не совпадает роль базы данных. Вы может проверить это подключившись к серверу Ident во время соединения и передав правильные номера портов.

  4. Может ты действительно хочешь подключиться с паролем, а не Идент. Отредактируйте 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 добавьте следующую строку в /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, чтобы найти его.

Внизу файла измените значения METHOD на trust для локального тестирования (полную информацию см. В документации postgres). Перезагрузите машину, чтобы убедиться, что все запущено чисто и новые параметры прочитаны.

Надеюсь, это излечит ваши беды. Он решил мои проблемы на Fedora 20 с PostgreSQL 9.3.

Для 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