Повідомлення про помилку після повідомлення: FATAL: Не вдалося встановити автентифікацію для користувача "..."


Відповіді:


36

Це означає, що Postgres намагається ідентифікувати користувача за допомогою протоколу Ident, але не може. Ідентифікатор особи працює так:

  • У вас база даних 'foo' у базі даних 'db'
  • Ваш pg_hba.confфайл (в /etc/postgres-something/main) визначає "Ідентифікатор" як протокол для підключення до бази даних 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. Можливо, ви насправді хочете підключитися паролем , а не ідентифікатором. Відредагуйте 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
Анвар

Я не думаю, що хтось би не хотів би відповісти, чому постгреси використовують "ident" як логін за замовчуванням?
icc97

Тому що це мало сенс 20 років тому і ніколи нічого не змінюється у * nix? :)
Стів Беннетт

@ icc97, нічого у цій відповіді не вказує на те, що "ідентифікатор" - це вхід за замовчуванням для Postgres; звідки ви взяли таку ідею? Наскільки я знаю, ім'я ролі суперрусера за замовчуванням у кластері Postgres - "postgres".
Wildcard

9

Не впевнений у причинах, але це вирішило для мене:

в pg_hba.conf

зміни до цього:

розмістити всі 127.0.0.1/32 md5

Точна помилка: Caused by: org.postgresql.util.PSQLException: FATAL: Ident authentication failed for user "postgres"


1
зміна "ident" -> "md5" зробила це для мене
webwesen

3

У CentOS додайте такий рядок до /var/lib/pgsql/9.3/data/pg_hba.conf:

host all all 127.0.0.1/32 trust

І прокоментуйте інші записи.

Звичайно, цей параметр не є безпечним, але якщо ви просто возиєтесь на розробку VM, як я, то, мабуть, це добре ...


0

Якщо ви ще цього не пробували, перегляньте свій файл pg_hba.conf. Він буде названий чимось на зразок /var/lib/pgsql/9.3/data/pg_hba.conf (Fedora 20); можливо, вам доведеться використовувати "find / -name pg_hba.conf", щоб знайти його.

У нижній частині файлу змініть значення "METHOD" на "довіряти" для локального тестування (для отримання повної інформації див. Документи postgres). Перезавантажте машину, щоб переконатися, що все запущено в чистоті та прочитані нові параметри.

Сподіваємось, це вилікує ваші негаразди. Це вирішило мої проблеми на Fedora 20 з PostgreSQL 9.3.


Не потрібно перезавантажувати всю вашу машину під час зміни конфігурацій PostgreSQL. Натомість спробуйте використовувати pg_ctl reloadз консолі або SELECT pg_reload_conf();під час виконання SQL як привілейованого користувача.
benjwadams
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.