Psql: FATAL: Идентификационная идентификация не удалась для пользователя "postgres"

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

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

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

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

Ответ 2

Следующие шаги предназначены для новой установки 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

Ответ 3

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

/etc/init.d/postgresql reload

Ответ 4

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

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

trust

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

reject

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

md5

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

password

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

gss

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

sspi

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

ident

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

peer

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

ldap

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

radius

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

cert

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

pam

Аутентификация с использованием службы подключаемых модулей аутентификации (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 зависит от ОС.

Ответ 5

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

Ответ 6

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

Ответ 7

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

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

host    all             all             ::1/128                 password

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

Ответ 8

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

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 

Ответ 9

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

sudo apt-get install pidentd
sudo service postgresql restart

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

Ответ 10

Хммм...

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

Ответ 11

Проблема остается вашим файлом 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.

Ответ 12

Мое решение на 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

Ответ 13

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

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

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

Ответ 15

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

Порядок настройки аутентификации в 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

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

Ответ 16

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

Ответ 17

Один взломать это - отредактировать 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

Ответ 18

У меня была аналогичная проблема, и я исправил ее в 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

Ответ 19

У меня была такая же проблема после этого: Настройка 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:

Ответ 20

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

systemctl restart postgresql-9.3.service

Ответ 21

Мне пришлось переустановить pdAdmin, чтобы решить эту проблему

brew cask reinstall pgadmin4