PostgreSQL中SCRAM认证失败排查:配置后仍提示密码错误
直接提交scram-sha-256格式密码是否正确?
不正确。psql连接时不需要手动输入scram-sha-256哈希后的密码,你只需要输入明文密码即可——psql会自动与PostgreSQL服务器协商认证机制,将明文密码转换为符合要求的scram-sha-256格式进行传输验证。手动输入哈希值相当于把哈希字符串当作明文密码提交,自然会验证失败。
可能导致认证失败的其他问题
用户密码未使用scram-sha-256哈希存储
即使pg_hba.conf配置了scram-sha-256认证,若用户的密码还是以md5或其他旧格式存储,服务器会拒绝认证。可以通过以下SQL检查用户的密码哈希格式:SELECT usename, passwd FROM pg_shadow;若passwd字段以
SCRAM-SHA-256$开头则为正确格式,否则需要重新设置密码(设置时服务器会自动用scram-sha-256哈希存储):ALTER USER your_username WITH PASSWORD 'your_plaintext_password';pg_hba.conf配置未生效
修改pg_hba.conf后需要重新加载PostgreSQL配置才能生效,执行以下命令:# 适用于systemd管理的系统 sudo systemctl reload postgresql # 或使用pg_ctl工具 pg_ctl reload -D /path/to/your/postgresql/data同时要确认pg_hba.conf中对应连接规则的认证方式确实是
scram-sha-256,且规则的优先级正确(PostgreSQL会匹配第一条符合条件的规则)。postgresql.conf中的password_encryption参数未设置为scram-sha-256
该参数控制新密码的默认加密格式,若未设置为scram-sha-256,后续新建用户或修改密码时仍会使用旧格式。检查并修改后同样需要重新加载配置:password_encryption = scram-sha-256连接时指定的认证方式与配置不匹配
若psql连接时手动指定了--auth=md5或其他认证方式,会覆盖pg_hba.conf的配置,导致认证失败。确保连接命令没有强制指定错误的认证方式,直接使用:psql -U your_username -d your_database密码输入错误
虽然听起来基础,但明文密码输入错误(包括大小写、特殊字符)是常见原因,确认输入的明文密码与设置用户时的密码完全一致。
内容的提问来源于stack exchange,提问作者Dux

