#windows #postgresql #windows-services #appdata
Вопрос:
В Microsoft Windows файл pgpass расположен следующим образом:
В Microsoft Windows файл называется %APPDATA%postgresqlpgpass.conf (где %APPDATA% относится к подкаталогу Данных приложения в профиле пользователя).
источник: https://www.postgresql.org/docs/current/libpq-pgpass.html
Когда я создаю подписку, как показано ниже, я не указываю пароль в строке подключения.
CREATE SUBSCRIPTION alltables
CONNECTION 'host=192.168.1.5 port=5432 user=replicator1 dbname=test1'
PUBLICATION alltables;
Вместо этого я хочу, чтобы пароль хранился в pgpass.conf
файле с ограниченным доступом.
После нескольких попыток я заметил, что в случае создания подписки pgpass.conf
не ожидается, что она будет найдена в каталоге пользователя пользователя Windows, выполняющего CREATE SUBSCRIPTION
команду. Другими словами, если мое имя пользователя Windows 10-это имя foobar
файла, то этого не ожидается C:UsersfoobarAppDataRoamingpostgresqlpgpass.conf
. Вместо этого, похоже, ожидается, что он находится в каталоге пользователя пользователя Windows, запускающего программу PostgreSQL.
Я нашел это, добавив passfile=C:\Users\foobar\AppData\Roaming\postgresql\pgpass.conf
в строку подключения и предоставив разрешения на чтение NETWORK SERVICE
пользователю (пользователю, который запускает postgres.exe
процессы). В этом случае подписка будет создана. Но если я удалю passfile
опцию из строки подключения, то ERROR: could not connect to the publisher: fe_sendauth: no password supplied
будет возвращено краткое сообщение об ошибке.
Итак, на что бы %APPDATA%postgresqlpgpass.conf
указывали в таком случае? Иными словами, где pgpass.conf
в таком случае должен находиться файл?
Комментарии:
1. Этот вопрос, по сути, таков: что
%APPDATA%
дляNETWORK SERVICE
пользователя?2. Я так полагаю, да
3. Одним из решений было бы запустить службу Postgres с обычным (ограниченным) пользователем, у которого есть
%APPDATA%
учетная запись. Если вы это сделаете, вам нужно обязательно настроить привилегии в текущем каталоге данных, чтобы «новый» пользователь имел к нему полный доступ.
Ответ №1:
Как прокомментировал Лоренц, вопрос, по сути, заключается в следующем: что %APPDATA%
для NETWORK SERVICE
пользователя?
В моем случае это так C:WindowsServiceProfilesNetworkServiceAppDataRoaming
.
Итак, создав файл C:WindowsServiceProfilesNetworkServiceAppDataRoamingpostgresqlpgpass.conf
pgpass , я могу создать подписку, как показано ниже, и пароль будет успешно взят из файла.
CREATE SUBSCRIPTION alltables
CONNECTION 'host=192.168.1.5 port=5432 user=replicator1 dbname=test1'
PUBLICATION alltables;