Как мне заставить pg_dump правильно аутентифицироваться


99

Я попытался с помощью переменного хоста PGPASSWORDи .pgpassи ни один из этих двух не позволит мне аутентификации в базу данных. У меня есть chmod«д .pgpassв соответствующие разрешения , а также пробовал:

export PGPASSWORD=mypass and PGPASSWORD=mypass

Пароль ДЕЙСТВИТЕЛЬНО содержит, \однако я заключил его в одинарные кавычки, PGPASS='mypass\'и он по-прежнему не аутентифицируется.

Я бегу:

pg_dump dbname -U username -Fc

и я все еще получаю

pg_dump: [archiver (db)] connection to database "dbname" failed: FATAL:  Peer authentication failed for user "username"

1
Эта часть сообщения об ошибке "... Peer authentication ..." означает, что аутентификация по паролю вообще не используется .
Милен А. Радев

Ответы:


198

Быстрое решение

Проблема в том, что он пытается выполнить локальную peerаутентификацию на основе вашего текущего имени пользователя. Если вы хотите использовать пароль, вы должны указать имя хоста с помощью -h.

pg_dump dbname -U username -h localhost -F c

Объяснение

Это связано со следующим в вашем pg_hba.conf

local   all             all                                     peer
host    all             all             127.0.0.1/32            md5

Это указывает Postgres использовать peerаутентификацию для локальных пользователей, которая требует, чтобы имя пользователя postgres совпадало с вашим текущим системным именем пользователя. Вторая строка относится к соединениям с использованием имени хоста и позволит вам пройти аутентификацию с помощью пароля с помощью md5метода.

Моя предпочтительная конфигурация разработки

ПРИМЕЧАНИЕ . Это следует использовать только на однопользовательских рабочих станциях. Это может привести к серьезной уязвимости системы безопасности на производственной или многопользовательской машине.

При разработке с использованием локального экземпляра postgres мне нравится менять локальный метод аутентификации на trust. Это позволит подключаться к postgres через локальный сокет unix как любой пользователь без пароля. Это можно сделать, просто изменив значение peerвыше trustи перезагрузив postgres.

# Don't require a password for local connections
local   all             all                                     trust

6
Для тех, кто не уверен, где находится ваш файл conf: используйте sudo locate pg_hba.conf- это должно быть sudo, поскольку пользователь postgres будет единственным, кто имеет доступ к каталогу (я думаю).
jcollum

ваша команда сработала для меня, но я не могу узнать, где она находится или каково имя файла, как я могу найти этот файл?
Собхан

Если я настрою свой Postgres внутри Docker, будет ли эта настройка работать для подключений, приходящих на мой локальный хост?
Джек Чи,

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.