Peer authentication failed for user in postgresql 在PostgreSQL中,对于用户的对等身份验证失败。
Peer authentication failed for user in postgresql 在PostgreSQL中,对于用户的对等身份验证失败。
我正在尝试通过一个Fabric脚本运行一些PostgreSQL命令。当我执行脚本时,我得到以下错误信息:
out: psql: FATAL: Peer认证失败,用户为"sparc2"
这是我的pg_hba.conf文件的内容:
# "local"只适用于Unix域套接字连接 local all all peer # IPv4本地连接: host all all 127.0.0.1/32 md5 # IPv6本地连接: host all all ::1/128 md5 # 允许来自localhost的复制连接,由具有复制权限的用户。 #local replication postgres peer #host replication postgres 127.0.0.1/32 md5 #host replication postgres ::1/128 md5 # 添加的内容 local sparc2 sparc2 md5 host sparc2 sparc2 127.0.0.1/32 md5 host sparc2 sparc2 10.0.2.2/32 md5 host all all all password
我还修改了postgresql.conf文件,添加了以下行:
listen_addresses = '*'
应用了更改后,我重新启动了PostgreSQL。但是错误仍然相同。
在PostgreSQL中出现(Peer authentication failed for user in postgresql)这个问题的原因是服务器配置为使用"peer"身份验证,这仅适用于Unix套接字连接,并且意味着要询问内核是否OS用户名与DB用户名匹配。解决方法有以下几种选择:
1. 将pg_hba.conf
中的"local"套接字连接的身份验证方式改为"md5"。
2. 在脚本中更改连接设置,使用IP连接(127.0.0.1
应该可以工作)而不是套接字连接。有时设置PGHOST
变量就足够了,不需要编辑文件。
3. 让脚本以OS用户"sparc2"而不是"postgres"运行。
风险/缺点:
1. 如果将"peer"更改为"md5",一些依赖"peer"身份验证并以"postgres" OS用户运行的自动化脚本将停止工作,并开始要求密码。
2. 如果将"peer"更改为"md5",并且忘记了数据库超级用户密码,可能需要重新启用"peer"身份验证来重置密码。
"peer"身份验证是可以接受的。基于内核的本地认证的便捷性和安全性是许多发行版选择将其用于本地管理员连接的原因。特别是在多用户shell服务器上非常有用。您可以仅为选定的帐户禁用它。
感谢您的回答。第一种方法有效。我对这些定制不是很熟悉,这样做有什么风险吗?
将"peer"更改为"md5"的唯一风险是,一些依赖"peer"身份验证的自动化脚本将停止工作,并开始要求密码。