我想让 PostgreSQL (超级)用户使用“peer”或“md5”身份验证方法进行身份验证,最好在两种情况下都使用本地 Unix 域套接字。问题是 pg_hba.conf 中条目的顺序很重要,并且将应用第一个匹配项。
我拥有的:
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer
local all all md5
我想要的(无效语法):
# TYPE DATABASE USER ADDRESS METHOD
local all harold peer-or-md5
local all all md5
以下是有关我们希望在其中使用它的环境的更多详细信息:
在这个特定的服务器上,所有数据库都相对较小(每个数据库的数据量小于 10MB)并且是纯只读的。它们每晚都会由超级用户 harold 删除并重新创建。harold 也是一个系统帐户,因此“peer”非常适合无密码的 cronjobs 等。然后有一个 Web 界面可以访问数据库:它使用 md5 身份验证(系统用户是 Web 服务器,pg 用户名、密码和数据库名称由访问者提供)。现在我想让 harold 用户也通过 Web 界面登录。由于 harold 的“peer”设置,此操作失败。
当前的解决方法是让 Web 界面通过 TCP 连接,使用
# TYPE DATABASE USER ADDRESS METHOD
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
除了第一个示例中的本地条目之外。这有效,但我宁愿在这里也使用本地套接字 - 出于性能考虑,并且直觉认为这似乎是正确的做法。
这可能吗?有没有更好的解决方法?
答案1
根据类似的 StackOverflow 问题,答案是否定的,您不能对同一种类型、数据库、用户和地址启用两种类型的身份验证。
StackOverflow 问题建议使用.pgpass
用户主目录中的文件并使用 md5 身份验证,但我不确定这是否一定适用于 cron 作业。