错误“authentication method 10 not supported”本质是Navicat旧版(15及更早)内置libpq.dll不支持scram-sha-256协议,而非密码或网络问题;需升级Navicat至16.2+、替换libpq.dll或临时将pg_hba.conf中local/host行认证方式改为md5(测试环境),并确保用户已设密码且规则顺序正确。
authentication method 10 not supported 这个错误不是“拒绝连接”,而是“听不懂认证语言”——postgresql 说要用 scram-sha-256 验证,navicat(尤其是 15 及更早版本)内置的 libpq.dll 根本不认识这个协议,直接放弃握手。
pg_hba.conf 的 local 行触发 ident 认证
Navicat 在没填 host 或填了 localhost 时,默认走本地 socket(Windows 下是命名管道),会匹配 pg_hba.conf 中以 local 开头的规则。
如果这行写着:
local all all ident
那它要求操作系统用户名和数据库用户名完全一致,而 Navicat 无法提供 OS 级凭证,必然失败。
- 打开
C:\Program Files\PostgreSQL\17\data\pg_hba.conf(版本号按实际替换) - 找到所有
local开头的行,把METHOD列从ident或peer改成md5 - 同时检查
host行:如果用127.0.0.1连,确保对应行也不是ident,且不是仅支持scram-sha-256而客户端不认 - 修改后必须重启 PostgreSQL 服务(Windows 中通过
services.msc操作),SELECT pg_reload_conf()不生效
Navicat 自带 libpq.dll 不支持 scram-sha-256
authentication method 10 就是 scram-sha-256 的内部编号。PostgreSQL 10+ 默认启用,但 Navicat 12–15 的 libpq.dll 多数只支持 md5。
- 验证方式:用命令行
psql -U postgres -h 127.0.0.1 -d postgres能连上,Navicat 连不上 → 基本锁定是客户端驱动问题 - 临时解法:把
pg_hba.conf对应行的METHOD改成md5(仅限开发/测试环境) - 长期解法:
- 升级到 Navicat 16.2+(原生支持
scram-sha-256) - 或手动替换
libpq.dll:找到 Navicat 安装目录下的plugins\postgresql\(路径可能含x64),用同版本 PostgreSQL 官方包里的libpq.dll替换(注意 x64/x86 位数一致)
- 升级到 Navicat 16.2+(原生支持
用户没设密码却启用了密码认证
md5 和 scram-sha-256 都要求用户有密码。如果你用 postgres 用户连接,但从来没执行过:
ALTER USER postgres PASSWORD 'your_password';
那即使配置全对,也会静默失败——错误可能表现为 password authentication failed 或直接卡在 handshake 阶段。
- 连上 psql(用系统用户或 trust 方式),运行
\du查看用户是否有 password 字段 - 若为空,必须显式设置密码;空密码 ≠ 免密认证
真正容易被忽略的是:pg_hba.conf 规则顺序决定匹配优先级。
比如你改了 host all all 127.0.0.1/32 scram-sha-256,但上面有一行 host all all 0.0.0.0/0 trust,那所有连接都会走 trust,你改的那行根本不会生效。
务必确认目标规则没有被更宽泛的规则提前捕获。


















