пароль фабрики postgres в команде - PullRequest
0 голосов
/ 18 января 2012

У меня есть скрипт фабрики, который выдает базу данных на сервер.И я могу использовать его на нескольких серверах с базой данных PostgreSQL.Команда проста:

sudo("su postgres -c \"PGPASSWORD=%s pg_dump %s > /tmp/telemedia_newdb\""
% (HOST_SOURCE_DB_UPASS,HOST_SOURCE_DB))

Но иногда Postgres вообще не запрашивает пароль ...

Сбой этой команды без запроса пароля от Postgres?(Или я знаю, что не подскажет и HOST_SOURCE_DB_UPASS='').Я хочу, чтобы этот код работал с паролем или без него.

1 Ответ

1 голос
/ 18 января 2012

Все зависит от того, как вы настроили доступ к базе данных в pg_hba.conf. Существует отдельный файл конфигурации для каждого кластера базы данных (фактически для порта), и настройки могут отличаться от базы данных к базе данных.

Так что, да, если вы настроили его таким образом, то системный пользователь postgres будет иметь доступ без пароля к некоторым базам данных, но будет предложено ввести пароль для других. по умолчанию означает, что системный пользователь postgres имеет доступ без пароля к каждой базе данных как пользователь базы данных с тем же именем (postgres).

Если в команде указан пароль с переменной среды PGPASSWORD, но пароль не требуется, он будет автоматически игнорироваться.

Однако я цитирую руководство здесь :

PGPASSWORD (...) Использование этой переменной среды не рекомендуется из соображений безопасности.

Вы можете использовать файл паролей для автоматического предоставления паролей (.pgpass в системах Unix). pg_dump будет использовать его.

Наконец, рассмотрим параметры командной строки :

--no-password
--password

, чтобы заставить pg_dump запрашивать или не запрашивать пароль. Если пароль требуется, но отключен --no-password, pg_dump завершится ошибкой.


Я бы включил доступ без пароля для системного пользователя postgres к каждой базе данных в файле конфигурации pg_hba.conf. Используйте peer или ident методы аутентификации . Тогда вам не нужно вводить пароль, и скрипт всегда будет работать:

local    all         postgres             ident

Ваш сценарий будет упрощен до (не проверено):

sudo("su postgres -c \"pg_dump %s > /tmp/telemedia_newdb\"" % (HOST_SOURCE_DB))
...