我可以在 pg_hba.conf 中为同一个 PostgreSQL 本地用户启用 peer 和 md5 身份验证吗?

Zil*_*ilk 16 postgresql configuration

我想让 PostgreSQL(超级)用户使用“peer”或“md5”身份验证方法进行身份验证,最好在两种情况下都使用本地 Unix 域套接字。问题是 pg_hba.conf 中条目的顺序很重要,将应用第一个匹配项。

我拥有的:

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer
  local   all        all                 md5
Run Code Online (Sandbox Code Playgroud)

我想要什么(无效的语法):

# TYPE    DATABASE   USER      ADDRESS   METHOD
  local   all        harold              peer-or-md5
  local   all        all                 md5
Run Code Online (Sandbox Code Playgroud)

以下是有关我们希望在其中使用它的环境的更多详细信息:

在这个特定的服务器上,所有数据库都相对较小(每个数据<10MB)并且是纯只读的。哈罗德超级用户每天晚上都会丢弃并重新创建它们。harold 也是一个系统帐户,因此“peer”适用于无密码的 cronjobs 等。然后有一个 Web 界面访问数据库:这使用 md5 身份验证(系统用户是网络服务器,pg 用户名、密码和数据库名称由访客)。现在我想让 harold 用户也通过 Web 界面登录。由于 harold 的“对等”设置,这失败了。

当前的解决方法是让网络界面通过 TCP 连接,使用

# TYPE    DATABASE   USER      ADDRESS        METHOD
  host    all        all       127.0.0.1/32   md5
  host    all        all       ::1/128        md5
Run Code Online (Sandbox Code Playgroud)

除了第一个示例中的本地条目。这行得通,但我也更愿意在这里使用本地套接字 - 出于性能考虑,并且因为直觉认为这似乎是正确的做法。

这可能吗?有没有更好的解决方法?

小智 11

根据一个类似的 StackOverflow question,答案是否定的,您不能为相同类型,数据库,用户和地址启用两种类型的身份验证。

StackOverflow 问题建议使用.pgpass用户主目录中的文件并使用 md5 身份验证,但我不确定这是否一定适用于 cron 作业。