Navicat连接PostgreSQL报“authentication method 10 not supported”错误,大概率是旧版Navicat内置的libpq.dll不支持scram-sha-256认证协议,而非密码或服务端配置问题;需升级Navicat至16+、手动替换libpq.dll或临时将pg_hba.conf中对应行认证方式改为md5(仅限测试环境)。
navicat 连不上 postgresql 并报 scram 认证失败,大概率不是密码错了,而是客户端根本“听不懂”服务端说的认证语言——scram-sha-256(即错误里常出现的 authentication method 10 not supported)。postgresql 10+ 默认启用它,但老版 navicat(尤其是 12/13/14/15)自带的 libpq.dll 往往只支持 md5,协议不匹配,连接直接中断。
确认是不是 pg_hba.conf 的 local 行在捣鬼
很多人填对了 127.0.0.1 和密码,却还是被 Ident authentication failed 拦住。这是因为 Navicat 在没填主机名时默认走 Unix socket(Windows 下是本地命名管道),触发的是 pg_hba.conf 里以 local 开头的规则,而这一行常写着 ident 或 peer —— 它们要求操作系统用户名和数据库用户名一致,Navicat 根本没法提供。
- 打开
pg_hba.conf(路径类似C:\Program Files\PostgreSQL\17\data\pg_hba.conf) - 找到所有
local开头的行,把METHOD列从ident或peer改成md5 - 如果同时用 127.0.0.1 连,也检查对应
host行,确保不是ident或scram-sha-256(后者需要客户端支持) - 改完必须重启 PostgreSQL 服务(Windows 下在
services.msc中操作),否则配置不生效
Navicat 版本太老,libpq.dll 不认识 scram
即使 pg_hba.conf 写了 scram-sha-256,只要 Navicat 自带的 libpq.dll 是旧版(比如随 Navicat 12 一起发布的),它就无法解析 method 10。这不是配置问题,是硬性兼容缺陷。
- 验证方式:用
psql -U postgres -h 127.0.0.1 -d postgres能连上,但 Navicat 连不上 → 基本锁定是客户端驱动问题 - 临时解法:把
pg_hba.conf对应行的 METHOD 改成md5(仅限开发/测试环境) - 长期解法:手动替换
libpq.dll—— 找到 Navicat 安装目录下的plugins\postgresql\(或类似路径),用 PostgreSQL 官方发行包里同版本的libpq.dll替换它(注意位数匹配:x64 对 x64) - 更省事:直接升级到 Navicat 16+,原生支持
scram-sha-256
别漏掉用户密码这个硬性前提
md5 和 scram-sha-256 都要求用户有密码。如果你用 postgres 用户连接,但从来没设过密码,哪怕配置全对,也会静默失败。
- 用
psql连进去执行:ALTER USER postgres PASSWORD 'your_secure_password'; - 确保 Navicat 连接设置里填的密码和这里一致(注意大小写、特殊字符)
- 如果用户是新建的,确认创建时用了
CREATE USER xxx WITH PASSWORD 'yyy';,而不是无密码创建
最易忽略的一点:pg_hba.conf 是按顺序匹配的,上面一条宽泛的 host all all 0.0.0.0/0 trust 可能先命中,导致你辛苦改的那行根本没机会生效。检查时务必看「实际生效的那条规则」,而不是你以为自己改对的那条。


















