PostgreSQL 9.5密码与Peer认证失败问题求助
看起来你在PostgreSQL 9.5的用户认证上碰到了两个头疼的问题:Peer认证失败和密码认证失败,我先帮你梳理操作里的细节,再一步步解决。
首先修正一个明显的拼写错误
你在执行修改事务隔离级别的命令时,把用户名写错了:
ALTER ROLE PostgressUser SET default_transaction_isolation TO 'read committed'
这里的用户名是PostgressUser(多了一个s),但你创建的用户是PostgresUser,这条命令其实没作用在目标用户身上,虽然这不是认证失败的直接原因,但先修正这个问题避免后续其他异常。
一、解决Peer认证失败问题
当你执行psql -d PostgresDB -U PostgresUser时出现Peer authentication failed,结合你给出的pg_hba.conf配置(local连接已设为md5认证),问题大概率是配置没生效,按以下步骤操作:
- 重启PostgreSQL服务,让配置生效
修改pg_hba.conf后必须重启服务才能加载新配置,执行命令:# 适用于systemd系统 sudo systemctl restart postgresql # 如果是老版本用service命令 # sudo service postgresql restart - 重新尝试本地登录
重启后再执行psql -d PostgresDB -U PostgresUser,此时应该会提示你输入密码,而不是触发Peer认证。
二、解决密码认证失败问题
你用-h 127.0.0.1或-W参数登录时出现密码认证失败,可能是这几个原因:
1. 密码设置命令有误
你重置密码时用的ALTER PostgresUser WITH PASSWORD 'password'是错误的语法,正确的重置密码命令应该是:
ALTER USER PostgresUser WITH PASSWORD 'your_new_password'; -- 或者用ALTER ROLE也可以 ALTER ROLE PostgresUser WITH PASSWORD 'your_new_password';
重新设置密码的完整步骤:
sudo su - postgres psql ALTER USER PostgresUser WITH PASSWORD 'new_secure_password'; \q
然后用新密码尝试登录。
2. 确认用户名大小写完全匹配
PostgreSQL默认对未加双引号的用户名会转为小写,但你创建的是PostgresUser(首字母大写),如果登录时不小心写成小写postgresuser会直接失败,确保登录命令里的用户名和创建时完全一致。
3. 再次确认pg_hba.conf的IPv4配置生效
你的pg_hba.conf里host all all 127.0.0.1/32 md5配置是正确的,但必须确保修改后重启了服务,否则旧的认证规则(比如ident)还在生效。
4. 重新授予数据库权限
有时候权限授予可能没生效,重新执行以下命令确保用户能连接并操作数据库:
GRANT CONNECT ON DATABASE PostgresDB TO PostgresUser; GRANT ALL PRIVILEGES ON DATABASE PostgresDB TO PostgresUser;
额外排查技巧
如果以上步骤都没解决,去查看PostgreSQL的日志文件,路径通常是/var/log/postgresql/postgresql-9.5-main.log(Linux Mint环境下),日志里会给出更详细的失败原因,比如是密码不匹配、用户不存在还是配置加载异常,能帮你快速定位问题。
内容的提问来源于stack exchange,提问作者TQM

