You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL 15.3为何采用SSPI认证而非密码认证?问题排查

问题分析与解决

核心原因

PostgreSQL的认证规则由pg_hba.conf文件控制,而非postgresql.conf里的全局参数。你遇到的问题是:Windows环境下PostgreSQL 15默认对localhost(含IPv4的127.0.0.1和IPv6的::1)连接配置了SSPI认证(依赖Windows系统用户账号),但你创建的数据库用户foo并非Windows系统用户,导致SSPI认证失败,且服务端优先使用该规则而非密码认证。

解决步骤

1. 找到并打开pg_hba.conf文件

文件路径通常为:

c:\Program Files\PostgreSQL\15\data\pg_hba.conf

2. 修改认证规则

找到文件中针对本地连接的条目,类似如下内容:

# IPv6 local connections:
host    all             all             ::1/128                 sspi
# IPv4 local connections:
host    all             all             127.0.0.1/32            sspi

将其中的sspi替换为scram-sha-256(PostgreSQL 15默认密码加密方式),修改后:

# IPv6 local connections:
host    all             all             ::1/128                 scram-sha-256
# IPv4 local connections:
host    all             all             127.0.0.1/32            scram-sha-256

如果习惯使用md5认证,需先在postgresql.conf中取消注释并设置password_encryption = md5,再重新设置用户密码,最后将上述条目改为md5。

3. 重启PostgreSQL服务

打开Windows服务管理器,找到postgresql-x64-15服务,右键选择重启。

4. 重新尝试连接

执行你的连接命令:

c:\Program Files\PostgreSQL\15\bin>set PGPASSWORD=foo
c:\Program Files\PostgreSQL\15\bin>psql -h localhost -p 5432 -U foo -d foo

补充说明

  • pg_hba.conf的规则按顺序匹配,确保修改的条目在其他可能匹配localhost的规则之前生效。
  • 若不想修改全局规则,可针对foo用户或foo数据库单独设置认证方式:
    host    foo             foo             ::1/128                 scram-sha-256
    host    foo             foo             127.0.0.1/32            scram-sha-256
    

内容的提问来源于stack exchange,提问作者Tomas Kubes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 09:33:04