Как я могу получить дамп pg для правильной аутентификации


Я пробовал использовать переменную хоста PGPASSWORD и .pgpass и ни один из этих двух не позволит мне аутентифицироваться в базе данных. У меня есть chmod ' d .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 77

1 ответ:

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

проблема в том, что он пытается проанализировать местные 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