Я установил 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
PGHOST=localhost
вам не нужно каждый раз указывать опцию -h
. Это также работает с другими командами pg_*
такими как pg_dump
.
Отредактируйте файл /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 вручную):
доверие
Разрешить соединение безоговорочно. Этот метод позволяет любому, кто может подключаться к серверу базы данных 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
зависит от ОС.
Просто добавив бит -h localhost
, все было необходимо для работы
this_computer = 'http://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
позволил мне войти в систему успешно.
Я обнаружил, что мне пришлось установить сервер идентификации, который прослушивает порт 113.
sudo apt-get install pidentd
sudo service postgresql restart
И затем работал идентификатор.
Проблема остается вашим файлом 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.
Из всех ответов выше ничего не работало для меня. Мне пришлось вручную изменить пароль пользователей в базе данных, и он внезапно сработал.
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
Мое решение на 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
Если вы можете подключиться к имени пользователя и паролю в 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 имеет значение в вашем случае, я думаю. Файл конфигурации по умолчанию включает несколько строк в установке 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
попробуйте прокомментировать.
Если вы все это сделали и все еще не работают, проверьте истечение срока для этого пользователя:
Один взломать это - отредактировать 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
В моем случае, решение здесь: (для людей, которые обеспокоены) Войти в postgres:
sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here
рассматривает
У меня была аналогичная проблема, и я исправил ее в 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
Для 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
Если вы используете его в CentOS, вам может потребоваться перезагрузить postgres после выполнения вышеуказанных решений:
systemctl restart postgresql-9.3.service
postgresql
systemctl status | grep postgres
У меня была такая же проблема после этого: Настройка 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:
Это сработало для меня: 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