【问题标题】:What is the default pgpass.conf location for the user running PostgreSQL service on Windows 10?在 Windows 10 上运行 PostgreSQL 服务的用户的默认 pgpass.conf 位置是什么?
【发布时间】: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


【解决方案1】:

正如 Laurenz 所说,问题本质上是:NETWORK SERVICE 用户的 %APPDATA% 是什么?

在我的例子中是C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\

所以,通过在C:\Windows\ServiceProfiles\NetworkService\AppData\Roaming\postgresql\pgpass.conf 中创建 pgpass 文件,我可以创建一个订阅,如下所示,密码将从文件中成功获取。

CREATE SUBSCRIPTION alltables
CONNECTION 'host=192.168.1.5 port=5432 user=replicator1 dbname=test1'
PUBLICATION alltables;

【讨论】:

    最近更新 更多