psql: фатально: ошибка аутентификации Ident для пользователя " postgres"
Я установил PostgreSQL и pgAdminIII на мой кармический ящик Ubuntu.
Я могу успешно использовать pgAdminIII (т. е. подключиться/войти в систему), однако, когда я пытаюсь войти на сервер, используя то же имя пользователя / pwd в командной строке (используя psql), я получаю ошибку:
psql: FATAL: Ident authentication failed for user "postgres"
кто-нибудь теперь, как решить эту проблему?
21 ответов
вы установили правильные настройки в pg_hba.конф?
см.https://help.ubuntu.com/stable/serverguide/postgresql.html как это сделать.
следующие шаги работают для новой установки 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". The -h localhost
часть важно он сообщает psql
клиент, который мы хотим подключить с помощью TCP-соединения (которое настроен на использование аутентификации паролем), а не одноранговым соединением (которое не заботится о пароле).
$ 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 руководство):
доверие
Разрешить подключение безоговорочно. Этот метод позволяет любому, что может подключаться к серверу баз данных PostgreSQL для входа в систему как любой Пользователь PostgreSQL они хотят, без необходимости пароля или каких-либо другая аутентификация. См. раздел 19.3.1 для деталей.
отклонение
отклонить соединение безоговорочно. Это полезно для "фильтрации out " определенные хосты из группы, например, строка отклонения может блокировать определенный хост от подключения, в то время как более поздняя линия позволяет оставшиеся хосты в определенной сети для подключения.
MD5 в
требовать от клиента предоставления двойного MD5-хэшированного пароля для идентификация. См. раздел 19.3.2 для деталей.
пароль
требовать от клиента предоставления незашифрованного пароля для идентификация. Поскольку пароль отправляется в текстовом формате по сети, это не должно использоваться в ненадежных сетях. См. Раздел 19.3.2 за подробности.
gss
используйте GSSAPI для аутентификации пользователя. Это доступно только для TCP / IP подключение. См. раздел 19.3.3 для деталей.
sspi
используйте SSPI для аутентификации пользователя. Это доступно только в Windows. Подробнее см. раздел 19.3.4.
идент
получить имя пользователя операционной системы клиента, связавшись с ident-сервер на клиенте и проверьте, соответствует ли он запрошенному имя пользователя базы данных. Аутентификация Ident может использоваться только на TCP / IP подключение. Если указано для локальных соединений, peer идентификация будет использоваться вместо этого. См. раздел 19.3.5 для деталей.
peer
получить имя пользователя операционной системы клиента из операционной системы система и проверьте, соответствует ли она запрошенному имени пользователя базы данных. Этот доступно только для локальных подключений. См. раздел 19.3.6 для подробности.
в LDAP
аутентификация с помощью сервера LDAP. См. раздел 19.3.7 для деталей.
радиус
аутентификация с помощью сервера RADIUS. См. раздел 19.3.8 для деталей.
cert
аутентификация с использованием сертификатов клиента 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
зависит от ОС.
Вы можете установить переменную окружения 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
и затем ident работал.
проблема по-прежнему ваш файл pg_hba.файл conf. Эта строка: вы можете найти этот файл в /etc/postgres/varion/main
local all postgres peer
Should be
local all postgres md5
это краткое описание обоих вариантов в соответствии с официальными документами PostgreSQL о методах аутентификации.
аутентификация однорангового
метод одноранговой аутентификации работает путем получения имени пользователя операционной системы клиента из ядра и использования его в качестве разрешенного имени пользователя базы данных (с необязательным именем пользователя отображение.) Этот метод поддерживается только в локальных соединениях.
аутентификация по паролю
методы аутентификации на основе паролей-md5 и password. Эти методы работают аналогично, за исключением способа отправки пароля через соединение, а именно 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';"
я использовал следующие параметры:
файл 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 9.3 на Mac OSX в оболочке bash должно было использовать sudo
чтобы перейти в папку данных, а затем добавить необходимые строки в pg_hba.conf
файл, чтобы позволить всем пользователям доверять и иметь возможность войти в систему. Вот что я сделал:--4-->
# 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
если выше работает, ваш сервер, вероятно, настроен на использование peer аутентификация для локальных соединений с помощью postgres user, т. е. запрашивая ОС для вашего имени пользователя, чтобы подтвердить, что вы postgres.
так это, вероятно, ваш файл pg_hba.conf
полный путь к файлу будет что-то как /и т. д./в PostgreSQL/9.3/главная/файле 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 файл начинается с #
.]
если вы are включая имя хоста в вашем добавить запись вместо этого:
# 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!
Я потратил больше времени на решение этой ошибки, которую я хочу признать.
порядок конфигурации аутентификации в 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 back to
# 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
в моем случае, решение здесь: (для тех, кто обеспокоен) войти в postgres:
sudo -i -u postgres
psql
ALTER USER postgres WITH PASSWORD 'postgres'; # type your password here
в отношении
для fedora26 и postgres9.6
во-первых, войдите как пользователь root
затем введите в psql следующие команды
$Су Постгреса
затем введите $psql в
в psql найти местоположение hba_file==> означает pg_hba.conf
postgres=# показать hba_file;
hba_file
/ etc/postgresql/9.6/main / pg_hba.conf
(1 ряд)
в файле pg_hba.conf изменить доступ пользователя к этому
хоста все 127.0.0.1/32 MD5 в
У меня было то же самое issuse после этого:настройка PostgreSQL для разработки Rails в Ubuntu 12.04
я попробовал другие ответы, но все, что мне нужно было сделать, это:"конфигурация базы данных/.в формате 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
это сработало для меня : 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