【发布时间】:2021-09-01 08:01:08
【问题描述】:
在 Microsoft Windows 上,pgpass 文件的位置如下:
在 Microsoft Windows 上,该文件名为 %APPDATA%\postgresql\pgpass.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 文件中。
经过几次尝试,我注意到在创建订阅的情况下,在运行CREATE SUBSCRIPTION 命令的 Windows 用户的用户目录中预计不会找到pgpass.conf。换句话说,如果我的 Windows 10 用户名是 foobar,则该文件不应该是 C:\Users\foobar\AppData\Roaming\postgresql\pgpass.conf。相反,它似乎应该在运行 PostgreSQL 程序的 Windows 用户的用户目录中。
我通过在连接字符串中添加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%\postgresql\pgpass.conf 会指向哪里?换句话说,在这种情况下,pgpass.conf 文件应该在哪里?
【问题讨论】:
-
这个问题本质上是:
NETWORK SERVICE用户的%APPDATA%是什么? -
我想是的,是的
-
一种解决方案是使用具有
%APPDATA%目录的常规(受限)用户运行 Postgres 服务。如果这样做,则需要确保调整当前数据目录的权限,以便“新”用户拥有对其的完全访问权限。
标签: windows postgresql windows-services appdata