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

372

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

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

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

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

morpheous
источник
Это сообщение stackoverflow сработало для меня: stackoverflow.com/a/18664239/2110769
Андреа

Ответы:

194

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

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

Фрэнк Хейкенс
источник
36
Это не работает для меня. Я потратил на это часы! Все, что я хочу сделать, это запустить команды psql в моем терминале. Что мне нужно, чтобы файл выглядел так, чтобы сделать это?
Шон
54
@SeanA тебе нужно что-то вроде 'sudo -u postgres psql'
JLarky
8
Не забывайте ';' в конце каждого утверждения на PSQL. Звучит глупо, но бывает, хе-хе.
omrsin
42
@ Роберт: "postgresql - самый недружелюбный пользователь db"? Попробуйте Oracle когда-нибудь, чтобы получить некоторую перспективу ... :)
mivk
5
Для тех, кто использует rails, мне нужно было установить pg_hba.conf и изменить «идент» на «пароль». Менять его на доверие не получалось.
Абе Петрильо
412

Следующие шаги работают для новой установки 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часть важна : она сообщает psqlклиенту, что мы хотим подключиться через TCP-соединение (которое настроено на использование аутентификации по паролю), а не через соединение PEER (которое не заботится о пароле).

$ psql -U postgres -h localhost
Manav
источник
13
Если вы установили, PGHOST=localhostвам не нужно указывать -hопцию каждый раз. Это также работает с другими pg_*командами, такими как pg_dump.
Самер
1
Это действительно задокументировано здесь: help.ubuntu.com/12.04/serverguide/postgresql.html
Хендра Узия
2
Это было необходимо для включения установки Mediawiki на Debian с PostgreSQL.
MIVK
2 года спустя, и мне нужно сделать это на Mac тоже.
Манав
1
плохо, потому что есть проблема безопасности, см. здесь: serverfault.com/questions/110154/…
Ay
161

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

/etc/init.d/postgresql reload
Данни Милосавлевич
источник
4
перезапуск одной команды postgresql: /etc/init.d/postgresql restart
Тайлер Лонг,
14
Зачем перезапускать, когда перезагрузка - это все, что тебе нужно?
Фрэнк Хайкенс
В этом случае: "/etc/init.d/postgresql-8.4 reload"
shaytac
1
этот здесь работал для меня. Перехода с peer на md5 было достаточно.
Джонатас CD
1
Хорошо, я noob postgresql, но я должен сообщить, что это restartсработало только для меня, а не reload--- после изменения /etc/postgresql/9.5/main/pg_hba.conf(изменения peerна trust).
Майк О'Коннор
91

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

Вы должны обязательно прочитать раздел 19.1 «Аутентификация клиента» в руководстве по PostgreSQL, чтобы лучше понять доступные параметры аутентификации (для каждой записи в pg_hba.conf ), но здесь приведен соответствующий фрагмент, который поможет вам решить проблему (из руководства по версии 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 для подробной информации.

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зависит от ОС.

Лев Бедросян
источник
4
Для меня это лучший ответ. Когда вы знаете все эти варианты, вы можете легко настроить конф. И особенно, когда вы работаете с Dev-машиной, вы можете просто установить «идент» для всех записей, чтобы не тратить свое время. Спасибо
venkatareddy
1
Это было полезно для меня тоже. В моем случае файл pg_hba.conf был настроен на peer, я изменил его на пароль. Обратите внимание, что при установке vanilla мне также пришлось установить пароль для пользователя postgres, sudo su - postgres psql, \ password установить пароль. Затем запустите соединение по умолчанию из pdgadmin3 с именем пользователя postgres и вашим установленным паролем.
edencorbin
1
И где этот файл найден? Конечно, вам может потребоваться составить список, поскольку между версиями, похоже, нет согласованности. Я думаю, что я просто бегу найти на '/'.
JosephK
1
На Ubuntu-16.04 это /etc/postgresql/9.6/main/pg_hba.conf.
Майк О'Коннор
1
Как новичок в psql, это огромная помощь, и она должна быть принятым ответом, поскольку она обслуживает различные методы аутентификации
Vyrnach
45

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

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

Вы можете установить переменную среды 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:
Иван Трехёкас
источник
15

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

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

host    all             all             ::1/128                 password

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

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

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

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

Я обнаружил, что мне нужно было установить сервер идентификации, который прослушивает порт 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!
Кенни Эвитт
источник
2
поздно в игре, но, серьезно, спасибо за то, что приложили усилия, чтобы объяснить вещи должным образом, чтобы я понял!
Джеффри 'JF' Лим
10

В моем случае решение здесь: (для заинтересованных лиц) войдите в postgres:

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

С уважением

VanThaoNguyen
источник
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.

Сунил Кумар
источник
7

Для fedora26 и postgres9.6

Сначала войдите в систему как пользователь root, затем войдите в 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 row)  

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

host all all 127.0.0.1/32 md5
mohsen.nour
источник
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
Это хорошо для сервера разработки, но я бы не рекомендовал это для производственной среды, так как вам больше не нужен пароль для подключения к базе данных с этими настройками.
Майкл
4

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

Я думаю, что порядок настройки аутентификации в pg_hba.conf уместен в вашем случае. Конфигурационный файл по умолчанию содержит несколько строк в стандартной установке. Эти значения по умолчанию могут соответствовать условиям ваших попыток аутентификации, что приводит к невозможности аутентификации. Сбой происходит независимо от дополнительной конфигурации, добавленной в конец файла .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

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

Джереми Уайтинг
источник
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
NTG
источник
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
TMA
источник
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:
Даниил
источник
0

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

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

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

brew cask reinstall pgadmin4
София Хваджа
источник
0

Для Windows, если вы не хотите редактировать pb_gba.conf, т.е. оставляете метод на MD5 (по умолчанию), создайте нового пользователя, запустив этот запрос в инструменте Query в PGadmin. PGadmin

CREATE USER admin WITH PASSWORD 'secret'

тогда в cmd

psql "dbname=Main_db host=127.0.0.1 user=admin password=secret port=5432

где dbname - это ваша база данных в postgresql

введите описание изображения здесь

Аджай Том Джордж
источник
-3

Это сработало для меня: 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
Ing. M.D'Ambrosio
источник
1
Это позволяет любому пользователю с локального хоста войти в систему как любой пользователь. Такое поведение нигде не упоминается в ссылке. И да, информационные страницы Debian содержат то же самое.
rkapl