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

26

Скажем, вы видите это сообщение:

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

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

Стив Беннетт
источник

Ответы:

36

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

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

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

  1. На компьютере, с которого вы пытаетесь подключиться, не работает сервер Ident . Проверьте это, попытавшись подключиться к нему через порт 113. Если это не удается, установите сервер Ident (например, sudo apt-get install oidentd).
  2. Существует сервер Ident, но нет роли базы данных, соответствующей имени, с которым вы пытаетесь соединиться ('foo' в приведенном выше примере). Так что создайте его, подключившись каким-либо образом к базе данных с правами суперпользователя и сделайте CREATE ROLE foo. Или добавьте запись в /etc/postgresql/.../main/pg_ident.conf.
  3. Возможно, имя пользователя оболочки не соответствует роли базы данных. Вы можете проверить это , подключившись к серверу Ident во время соединения и указав правильные номера портов.
  4. Может быть, вы на самом деле хотите соединиться с паролем , а не Ident. Отредактируйте pg_hba.confфайл соответствующим образом. Например, изменить:

    host all all 127.0.0.1/32 ident
    

    в

    host all all 127.0.0.1/32 md5
    
Стив Беннетт
источник
2
Для fedora, файл находится в/var/lib/psql/data
Анвар
Я не думаю, что кто-то захочет ответить, почему postgres использует «идент» в качестве имени для входа по умолчанию?
icc97
Потому что это имело смысл 20 лет назад и ничего не изменилось в * nix? :)
Стив Беннетт
@ icc97, ничто в этом ответе не указывает, что "идент" является логином по умолчанию для Postgres; откуда у тебя эта идея? Насколько я знаю, имя роли суперпользователя по умолчанию в кластере Postgres - "postgres".
подстановочный
9

Не уверен насчет причин, но это исправило это для меня:

в pg_hba.conf

изменить на это:

хост все все 127.0.0.1/32 md5

Точная ошибка: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"

jacktrades
источник
1
меняя "идент" -> "md5" сделал это для меня
webwesen
3

В CentOS добавьте следующую строку /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

И закомментируйте другие записи.

Конечно, эта установка не безопасно, но если вы просто возитесь на развитии VM , как я , то это , вероятно , хорошо ...

XåpplI'-I0llwlg'I -
источник
0

Если вы еще этого не пробовали, просмотрите файл 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.

Алан Томпсон
источник
Нет необходимости перезагружать всю вашу машину при изменении настроек PostgreSQL. Вместо этого попробуйте использовать pg_ctl reloadиз консоли или SELECT pg_reload_conf();при выполнении SQL от имени привилегированного пользователя.
benjwadams