psql: FATAL: аутентификация идентификатора не удалась для пользователя «postgres»

309

Я установил PostgreSQL и pgAdminIII в свой ящик Ubuntu Karmic.

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

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

Кто-нибудь теперь может решить эту проблему?

Теги:

21 ответ

162
Лучший ответ

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

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

  • 31
    Это не работает для меня. Я потратил на это часы! Все, что я хочу сделать, это запустить команды psql в моем терминале. Что мне нужно, чтобы файл выглядел так, чтобы сделать это?
  • 52
    @SeanA тебе нужно что-то вроде 'sudo -u postgres psql'
Показать ещё 6 комментариев
375

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

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

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

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

$ psql -U postgres -h localhost
  • 12
    Если вы установите PGHOST=localhost вам не нужно каждый раз указывать опцию -h . Это также работает с другими командами pg_* такими как pg_dump .
  • 1
    Это документально описано здесь: help.ubuntu.com/12.04/serverguide/postgresql.html
Показать ещё 4 комментария
137

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

/etc/init.d/postgresql reload
  • 3
    одна команда перезапустить postgresql: /etc/init.d/postgresql restart
  • 14
    Зачем перезапускать, когда перезагрузка - это все, что тебе нужно?
Показать ещё 6 комментариев
55

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

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

доверие

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

отклонить

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

md5

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

пароль

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

ОСБ

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

ССПИ

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

идент

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

равный

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

LDAP

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

радиус

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

серт

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

Пэм

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

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

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

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

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

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

  • 3
    Для меня это лучший ответ. Когда вы знаете все эти варианты, вы можете легко настроить конф. И особенно, когда вы работаете с Dev-машиной, вы можете просто установить «идент» для всех записей, чтобы не тратить свое время. Спасибо
  • 1
    Это было полезно для меня тоже. В моем случае файл pg_hba.conf был настроен на peer, я изменил его на пароль. Обратите внимание, что после установки vanilla мне также пришлось установить пароль для пользователя postgres, sudo su - postgres psql, \ password установить пароль. Затем запустите соединение по умолчанию из pdgadmin3 с именем пользователя postgres и вашим установленным паролем.
Показать ещё 4 комментария
40

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

  • 0
    Знаем ли мы, почему это исправляет это?
  • 0
    Значения по умолчанию postgresql не установлены разумно. Возможно, они уже исправили это, я не знаю. Очевидно, что URL по умолчанию должен быть this_computer = 'http://localhost'
13

Вы можете установить переменную окружения 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:
10

Если ни одно из вышеперечисленных действий для вас не работает:

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

host    all             all             ::1/128                 password

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

  • 0
    Спасибо, Итан. Я использую Fedora 20 и столкнулся с той же проблемой, что и OP. После смены IPV4 и IPV6 на пароль. Соединение прошло успешно.
  • 1
    Пожалуйста. Очень много раз я получал пользу от постов других, когда сталкивался с проблемой программирования или системы. Рад, что мог немного вернуть.
10

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

sudo apt-get install pidentd
sudo service postgresql restart

И затем работал идентификатор.

7

Проблема остается вашим файлом pg_hba.conf. Эта строка: вы можете найти этот файл в /etc/postgres/varion/main

local   all             postgres                                peer
Should be

local   all             postgres                                md5

Это краткое описание обоих вариантов в соответствии с официальными документами PostgreSQL по методам проверки подлинности.

Аутентификация с использованием одноранговой сети

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

Идентификация пароля

Методы проверки подлинности на основе пароля - это md5 и пароль. Эти методы работают аналогично, кроме способа передачи пароля по соединению, а именно MD5-хэша и четкого текста соответственно.

Если вы вообще обеспокоены атаками "обнюхивания" паролей, то предпочтительным является md5. По возможности всегда следует избегать простого пароля. Однако md5 нельзя использовать с функцией db_user_namespace. Если соединение защищено шифрованием SSL, то пароль можно использовать безопасно (хотя проверка подлинности SSL-сертификата может быть лучшим выбором, если он зависит от использования SSL).

После изменения этого файла не забудьте перезагрузить сервер PostgreSQL. Если вы находитесь в Linux, это будет sudo service postgresql restart.

6

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

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 
  • 0
    Это помогло мне, Джозеф. Особенно, команда подключения в конце, чтобы помочь мне проверить это. Кроме того, я бы добавил перезапуск сервиса Postgresql, если кому-то интересно (но я понимаю, что это подразумевается). Цените это много!
6

Мое решение на PostgreSQL 9.3 на Mac OSX в оболочке bash должно было использовать sudo для перехода в папку данных, а затем добавить необходимые строки в файл pg_hba.conf, чтобы разрешить всем пользователям доверять и быть в состоянии войти. Это то, что я сделал:

# in bash_profile edit PGDATA environmental variable
open ~/.bash_profile

# append this line to bash_profile
export PGDATA="/Library/PostgreSQL/9.3/data"

# reload bash_profile
source ~/.bash_profile

# open pg_hba.conf in vim
sudo vi /Library/PostgreSQL/9.3/data/pg_hba.conf

# append these two lines to the end of the pg_hba.conf file
local   all   all                  trust
host    all   all   127.0.0.1/32   trust

# can now login as user in bash
psql -d <db_name> -U <user_name> -W
  • 1
    Это хорошо для сервера разработки, но я бы не рекомендовал это для производственной среды, так как вам больше не нужен пароль для подключения к базе данных с этими настройками.
5

Хммм...

Если вы можете подключиться к имени пользователя и паролю в 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

Если это работает, ваш сервер, вероятно, настроен на использование одноранговой аутентификации для локальных подключений пользователем postgres, то есть попросит ОС для вашего имени пользователя подтвердить, что вы 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!
  • 1
    поздно в игре, но, серьезно, спасибо за то, что приложили усилия, чтобы объяснить вещи должным образом, чтобы я понял!
4

Я потратил больше времени на решение этой ошибки, которую я хочу признать.

Порядок настройки аутентификации в pg_hba.conf имеет значение в вашем случае, я думаю. Файл конфигурации по умолчанию включает несколько строк в установке vanilla. Эти значения по умолчанию могут соответствовать условиям попыток аутентификации, что приводит к сбою в аутентификации. Он выходит из строя независимо от дополнительной конфигурации, добавленной в конце файла .conf.

Чтобы проверить, какая строка конфигурации используется, обязательно просмотрите файл журнала по умолчанию для сообщений. Вы можете увидеть что-то вроде этого

LOG:  could not connect to Ident server at address "127.0.0.1", port 113: Connection refused
FATAL:  Ident authentication failed for user "acme" 
DETAIL:  Connection matched pg_hba.conf line 82: "host     all             all             127.0.0.1/32            ident"

Оказывается, эта строка по умолчанию вызывает отклонение.

host    all             all             127.0.0.1/32            ident

попробуйте прокомментировать.

4

Если вы все это сделали и все еще не работают, проверьте истечение срока для этого пользователя:

Ошибка аутентификации паролей Postgres

3

Один взломать это - отредактировать pg_hba.conf

sudo vi /etc/postgresql/9.3/main/pg_hba.conf

Чтобы временно

# Database administrative login by Unix domain socket
local   all             postgres                                   trust

На этом мы закончили. Для обеспечения безопасности перейдите и

sudo -u postgres psql template1
ALTER USER postgres with encrypted password 'your_password';

вернитесь назад и установите pg_hba.conf обратно в

# Database administrative login by Unix domain socket
local   all             postgres                                   md5
1

В моем случае, решение здесь: (для людей, которые обеспокоены) Войти в postgres:

sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here

рассматривает

1

У меня была аналогичная проблема, и я исправил ее в pg_hba.conf при удалении всех методов идентификатора даже для адреса IP6 (несмотря на то, что у меня только IP4 на машине).

host all all 127.0.0.1/32 password
host all all ::1/128 password
#for pgAdmin running at local network
host all all 192.168.0.0/24 md5
0

Для fedora26 и postgres9.6

Сначала зарегистрируйтесь как пользовательский корень
затем введите в psql следующие команды: $ su postgres
затем введите $psql

в psql найти местоположение hba_file == > означает pg_hba.conf

postgres = # show hba_file;

hba_file

/etc/postgresql/9.6/main/pg_hba.conf
(1 строка)

в файле pg_hba.conf изменить доступ пользователя к этому

host all all 127.0.0.1/32 md5

0

Если вы используете его в CentOS, вам может потребоваться перезагрузить postgres после выполнения вышеуказанных решений:

systemctl restart postgresql-9.3.service
  • 0
    Теперь это просто postgresql
  • 0
    Сервис @NeilChowdhury postgresql по-прежнему имеет версию в названии сервиса, по крайней мере, в системах Linux. Запустите эту команду, чтобы увидеть systemctl status | grep postgres
0

У меня была такая же проблема после этого: Настройка PostgreSQL для разработки Rails в Ubuntu 12.04

Я попробовал другие ответы, но все, что мне нужно было сделать, было в: "config/database.yml"

development:
  adapter: postgresql
  encoding: unicode
  database: (appname)_development
  pool: 5
  username: (username you granted appname database priviledges to)
  password:
-2

Это сработало для меня: http://tecadmin.net/fatal-ident-authentication-failed-for-user-postgres/#

local   all             postgres                                trust
local   all             myapp_usr                               trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
#host    all             all             ::1/128                 trust
  • 0
    Это позволяет любому пользователю с локального хоста войти в систему как любой пользователь. Такое поведение нигде не упоминается в ссылке. И да, информационные страницы Debian содержат то же самое.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню