Ответ 1
Вы установили правильные настройки в pg_hba.conf?
Смотрите https://help.ubuntu.com/stable/serverguide/postgresql.html, как это сделать.
Я установил PostgreSQL и pgAdminIII в свой ящик Ubuntu Karmic.
Я могу успешно использовать pgAdminIII (т.е. подключиться/войти в систему), однако, когда я пытаюсь войти на сервер, используя то же имя пользователя /pwd в командной строке (используя psql), я получаю ошибку:
psql: FATAL: Ident authentication failed for user "postgres"
Кто-нибудь теперь может решить эту проблему?
Вы установили правильные настройки в pg_hba.conf?
Смотрите https://help.ubuntu.com/stable/serverguide/postgresql.html, как это сделать.
Следующие шаги предназначены для новой установки 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
Отредактируйте файл /etc/postgresql/8.4/main/pg_hba.conf
и замените ident
или peer
на md5
или trust
, в зависимости от того, хотите ли вы попросить пароль на своем собственном компьютере или нет.
Затем перезагрузите файл конфигурации с помощью
/etc/init.d/postgresql reload
Вы получаете эту ошибку, потому что вы не проходите аутентификацию клиента. Исходя из сообщения об ошибке, у вас, вероятно, есть конфигурация 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.
Итак... чтобы решить проблему, с которой вы столкнулись, вы можете выполнить одно из следующих действий:
Измените метод аутентификации, определенный в вашем pg_hba.conf
файл в trust
, md5
или password
(в зависимости от вашей безопасности
и простота нужна) для локальных записей подключения у вас есть
определены там.
Обновите pg_ident.conf
, чтобы сопоставить пользователей вашей операционной системы с
Пользователи PostgreSQL и предоставляют им соответствующие права доступа,
в зависимости от ваших потребностей.
Оставьте настройки IDENT в покое и создайте пользователей в своей базе данных для каждому пользователю операционной системы, которому вы хотите предоставить доступ. Если пользователь уже аутентифицирован операционной системой и вошел в систему, PostgreSQL не требует дальнейшей аутентификации и предоставит доступ к ней пользователь на основе любых привилегий (ролей), назначенных ему в база данных. Это конфигурация по умолчанию.
Примечание. Расположение pg_hba.conf
и pg_ident.conf
зависит от ОС.
Просто добавив бит -h localhost
, все было необходимо для работы
Вы можете установить переменную окружения 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:
Если ни одно из вышеперечисленных действий для вас не работает:
Я сделал довольно много установок Postgres, но сегодня был запутан на RedHat 6.5 (установка Postgres 9.3). Моя типичная конфигурация hba.conf, показанная выше Ароном, не работает. Оказалось, что моя система использует IPV6 и игнорирует конфигурацию IPV4. Добавление строки:
host all all ::1/128 password
позволил мне войти в систему успешно.
Из всех ответов выше ничего не работало для меня. Мне пришлось вручную изменить пароль пользователей в базе данных, и он внезапно сработал.
psql -U postgres -d postgres -c "alter user produser with password 'produser';"
Я использовал следующие настройки:
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
Я обнаружил, что мне пришлось установить сервер идентификации, который прослушивает порт 113.
sudo apt-get install pidentd
sudo service postgresql restart
И затем работал идентификатор.
Если вы можете подключиться к имени пользователя и паролю в 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.
Полный путь к файлу будет как/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
. Если у вас есть сомнения относительно того, где его поставить, просто поставьте его перед первой некомментированной строкой.
Из 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!
Проблема остается вашим файлом 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.
Мое решение на 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
В моем случае, решение здесь: (для людей, которые обеспокоены) Войти в postgres:
sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here
рассматривает
Если вы все это сделали и все еще не работают, проверьте истечение срока для этого пользователя:
Я потратил больше времени на решение этой ошибки, которую я хочу признать.
Порядок настройки аутентификации в 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
попробуйте прокомментировать.
Для fedora26 и postgres9.6
Сначала зарегистрируйтесь как пользовательский корень
затем введите в psql следующие команды:
$ su postgres
затем введите $psql
в psql найти местоположение hba_file == > означает pg_hba.conf
postgres = # show hba_file;
/etc/postgresql/9.6/main/pg_hba.conf
(1 строка)
в файле pg_hba.conf изменить доступ пользователя к этому
host all all 127.0.0.1/32 md5
Один взломать это - отредактировать 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
У меня была аналогичная проблема, и я исправил ее в 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
У меня была такая же проблема после этого: Настройка 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:
Если вы используете его в CentOS, вам может потребоваться перезагрузить postgres после выполнения вышеуказанных решений:
systemctl restart postgresql-9.3.service
Мне пришлось переустановить pdAdmin, чтобы решить эту проблему
brew cask reinstall pgadmin4
Это сработало для меня: 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