psql: FATAL: аутентификация идентификатора не удалась для пользователя "postgres" - PullRequest
348 голосов
/ 31 мая 2010

Я установил PostgreSQL и pgAdminIII на свою коробку Ubuntu Karmic.

Я могу успешно использовать pgAdminIII (т.е. подключиться / войти в систему), однако, когда я пытаюсь войти на сервер, используя то же имя пользователя / pwd в командной строке (используя psql), я получаю ошибку:

psql: FATAL:  Ident authentication failed for user "postgres"

Кто-нибудь сейчас решает эту проблему?

Ответы [ 21 ]

401 голосов
/ 18 июля 2012

Следующие шаги работают для новой установки postgres 9.1 на Ubuntu 12.04. (Работал для postgres 9.3.9 и в Ubuntu 14.04.)

По умолчанию postgres создает пользователя с именем 'postgres'. Мы входим как она и даем ей пароль.

$ sudo -u postgres psql
\password
Enter password: ...
...

Выйдите из psql, набрав \q или ctrl+d. Затем мы подключаемся как «postgres». -h localhost part важен : он сообщает клиенту psql, что мы хотим подключиться через TCP-соединение (которое настроено на использование аутентификации по паролю), а не через соединение PEER (которое не заботиться о пароле).

$ psql -U postgres -h localhost
183 голосов
/ 31 мая 2010

Вы установили правильные настройки в pg_hba.conf?

См. https://help.ubuntu.com/stable/serverguide/postgresql.html, как это сделать.

152 голосов
/ 23 сентября 2011

Отредактируйте файл /etc/postgresql/8.4/main/pg_hba.conf и замените ident или peer на md5 или trust, в зависимости от того, хотите ли вы запрашивать пароль на вашем компьютере или нет. Затем перезагрузите файл конфигурации с помощью:

/etc/init.d/postgresql reload
79 голосов
/ 16 января 2014

Вы получаете эту ошибку, потому что вы не проходите аутентификацию клиента. Исходя из сообщения об ошибке, у вас, вероятно, есть конфигурация postgres по умолчанию, которая устанавливает метод аутентификации клиента «IDENT» для всех соединений PostgreSQL.

Вы обязательно должны прочитать раздел 19.1 Аутентификация клиента в Руководстве по PostgreSQL , чтобы лучше понять доступные параметры аутентификации (для каждой записи в pg_hba. conf ), но вот соответствующий фрагмент, который поможет вам решить проблему (из руководства version 9.5 ):

доверие

Разрешить соединение безоговорочно. Этот метод позволяет любому, кто можно подключиться к серверу базы данных PostgreSQL для входа в систему как любой Пользователь PostgreSQL, которого они хотят, без пароля или какого-либо другая аутентификация. Подробнее см. Раздел 19.3.1.

отклонять

Отклонить соединение безоговорочно. Это полезно для "фильтрации некоторые хосты из группы, например, строка отклонения может заблокировать конкретный хост от подключения, в то время как более поздняя линия позволяет Остальные узлы в определенной сети для подключения.

md5

Требовать от клиента предоставить пароль с двойным MD5-хэшированием аутентификация. Подробнее см. Раздел 19.3.2.

пароль

Требовать от клиента предоставить незашифрованный пароль для аутентификация. Поскольку пароль отправляется в виде открытого текста над сеть, это не должно использоваться в ненадежных сетях. Смотрите раздел 19.3.2 для деталей.

GSS ​​

Используйте GSSAPI для аутентификации пользователя. Это доступно только для TCP / IP соединения. Подробнее см. Раздел 19.3.3.

ССПИ

Используйте SSPI для аутентификации пользователя. Это доступно только в Windows. Подробнее см. Раздел 19.3.4.

идент

Получите имя пользователя операционной системы клиента, связавшись с Идентифицируйте сервер на клиенте и проверьте, соответствует ли он запрошенному имя пользователя базы данных. Идентификационная аутентификация может использоваться только в TCP / IP соединения. Когда указано для локальных соединений, одноранговая аутентификация будет использоваться вместо Подробнее см. Раздел 19.3.5.

равный

Получить имя пользователя операционной системы клиента из операционной система и проверьте, соответствует ли оно запрашиваемому имени пользователя базы данных. это доступно только для локальных подключений. Смотрите Раздел 19.3.6 для подробности.

* 1065 LDAP *

Аутентификация с использованием сервера LDAP. Подробнее см. Раздел 19.3.7.

радиус

Аутентификация с использованием сервера RADIUS. Подробнее см. Раздел 19.3.8.

серт

Аутентификация с использованием клиентских сертификатов SSL. Смотрите Раздел 19.3.9 для подробности.

Пэм

Аутентификация с использованием службы подключаемых модулей аутентификации (PAM) предоставляется операционной системой. Подробнее см. Раздел 19.3.10.

Итак ... чтобы решить проблему, с которой вы столкнулись, вы можете выполнить одно из следующих действий:

  1. Измените методы аутентификации, определенные в вашем pg_hba.conf файл в trust, md5 или password (в зависимости от вашей безопасности и простота нужна) для локальных записей подключения у вас есть определены там.

  2. Обновление pg_ident.conf для сопоставления пользователей вашей операционной системы Пользователи PostgreSQL и предоставляют им соответствующие права доступа, в зависимости от ваших потребностей.

  3. Оставьте настройки IDENT в покое и создайте пользователей в своей базе данных для каждому пользователю операционной системы, которому вы хотите предоставить доступ. Если пользователь уже аутентифицирован операционной системой и вошел в систему, PostgreSQL не требует дальнейшей аутентификации и предоставит доступ к нейпользователь на основе любых привилегий (ролей), назначенных ему в база данных. Это конфигурация по умолчанию.

Примечание. Расположение pg_hba.conf и pg_ident.conf зависит от ОС.

44 голосов
/ 10 сентября 2013

Простое добавление бита -h localhost - все, что мне нужно для работы

14 голосов
/ 13 марта 2014

Вы можете установить переменную окружения PGHOST=localhost:

$ psql -U db_user db_name
psql: FATAL:  Peer authentication failed for user "db_user"

$ export PGHOST=localhost
$ psql -U db_user db_name

Password for user mfonline:
13 голосов
/ 05 апреля 2014

В случае, если ничего из вышеперечисленного не работает для вас:

Я сделал довольно много установок Postgres, но сегодня был сбит с толку в системе RedHat 6.5 (установка Postgres 9.3). Моя типичная конфигурация hba.conf, которую Aron показывает выше, не работает. Оказалось, что моя система использует IPV6 и игнорирует конфигурацию IPV4. Добавление строки:

host    all             all             ::1/128                 password

позволил мне успешно войти в систему.

10 голосов
/ 06 мая 2013

Я обнаружил, что мне нужно установить сервер идентификации, который прослушивает порт 113.

sudo apt-get install pidentd
sudo service postgresql restart

И тогда сработало.

10 голосов
/ 04 октября 2015

Из всех приведенных выше ответов у меня ничего не получалось. Мне пришлось вручную изменить пароль пользователя в базе данных, и он неожиданно сработал.

psql -U postgres -d postgres -c "alter user produser with password 'produser';"

Я использовал следующие настройки:

pg_hba.conf

local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            password  
# IPv6 local connections:
host    all             all             ::1/128                 password

Подключение успешно завершено для следующей команды:

psql -U produser -d dbname -h localhost -W 
7 голосов
/ 11 июня 2015

Хммм ...

Если вы можете подключиться с помощью имени пользователя и пароля в pgAdminIII, но не можете подключиться с помощью psql, то эти две программы, вероятно, подключаются к базе данных по-разному.

[Если вы подключаетесь к разным базам данных, сначала попробуйте подключиться к одной и той же базе данных. Смотри ниже.]

С PostgreSQL: Документация: 9.3: psql :

Если вы опустите имя хоста, psql подключится через сокет Unix-домена к серверу на локальном хосте или через TCP / IP к localhost на машинах, у которых нет сокетов Unix-домена.

Если вы не используете что-то вроде psql ... -h host_name ... и используете Ubuntu, psql должно подключаться через сокет Unix-домена, поэтому PostgreSQL, вероятно, не настроен на использование одного из методов аутентификации по паролю. для пользователя postgres .

Вы можете проверить это, запустив:

sudo -u postgres psql

Если вышеперечисленное работает, ваш сервер, вероятно, настроен на использование peer аутентификации для локальных подключений пользователем postgres , т.е. запрашивает у ОС ваше имя пользователя, чтобы подтвердить, что вы ' re postgres .

Так что, вероятно, ваш pg_hba.conf Файл

Полный путь к файлу будет примерно таким , как / etc / postgresql / 9.3 / main / pg_hba.conf . Вы можете просмотреть его, например, sudo cat /etc/postgresql/9.3/main/pg_hba.conf | more.

Если вы опускаете имя хоста в своей команде psql, вы сможете подключиться, если добавите следующую запись в ваш pg_hba.conf файл:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5

[Комментируемые строки в файле pg_hba.conf начинаются с #.]

Если вы , включая имя хоста в вашей команде psql, добавьте эту запись вместо:

# Connection type   Database   User       IP addresses   Method
host                all        postgres   127.0.0.1/32   md5

Вам нужно поставить запись, прежде чем другие записи будут сопоставлены для вашего соединения через psql. Если вы сомневаетесь в том, куда его поместить, просто поместите его перед первой строкой без комментариев.

Подробнее о pg_hba.conf

От PostgreSQL: Документация: 9.3: Файл pg_hba.conf [жирный акцент мой]:

Первая запись с соответствующим типом подключения , адрес клиента , запрашиваемая база данных и имя пользователя используется для выполнения аутентификации , Не существует "резервных" или "резервных копий": если выбрана одна запись и аутентификация не пройдена, последующие записи не рассматриваются. Если не найдено ни одной записи, доступ запрещен.

Обратите внимание, что записи не соответствуют методу аутентификации. Итак, если ваш pg_hba.conf файл содержит следующую запись:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  peer

Тогда вы не сможете подключиться через:

psql -u postgres

Если одна из этих записей не находится в вашем pg_hba.conf файле над прежней записи:

# Connection type   Database   User       IP addresses   Method
local               all        postgres                  md5
local               all        postgres                  password   # Unencrypted!
local               all        all                       md5
local               all        all                       password   # Unencrypted!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...