Каково местоположение pgpass.conf по умолчанию для пользователя, запускающего службу PostgreSQL в Windows 10?

#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;