根本原因是服务端密码哈希格式与navicat支持的认证协议不匹配:需将password_encryption_type设为0(md5),重启数据库,再用alter user重设密码使pg_authid中rolpassword以md5开头,并在pg_hba.conf中配置host all all 0.0.0.0/0 md5且重载配置。

Navicat 连不上 openGauss,报“认证协议不支持”或类似 fe_sendauth: invalid authentication request from server: AUTH_REQ_SASL_CONT,根本原因只有一个:服务端密码加密方式和客户端能理解的认证流程对不上。改配置文件只是第一步,不重设密码等于白改。
确认 openGauss 当前密码加密方式
直接查数据库里存的是哪种哈希:
SELECT rolname, rolpassword FROM pg_authid WHERE rolcanlogin = TRUE;
如果 rolpassword 值以 SCRAM-SHA-256 开头(比如包含 $scram$),或者压根没显示 md5 前缀,说明当前用户密码是用 SHA256 加密的,Navicat 拿不到有效凭证。
别只看 postgresql.conf 里的 password_encryption_type,它只控制新密码怎么存,不影响已存密码的格式。
把 password_encryption_type 设为 0 并重启服务
编辑 /var/lib/opengauss/data/postgresql.conf,确保有这一行:
password_encryption_type = 0
然后执行:
gs_ctl restart -D /var/lib/opengauss/data
注意:0 表示 MD5,2 是 SCRAM-SHA-256(Navicat 不认),1 是 SHA256(也不支持)。别写错数字,也别漏掉重启——改了配置不重启,等于没改。
必须重新设置一次用户密码
这是最容易跳过的致命步骤。即使你改了 password_encryption_type,旧密码还是 SHA256 格式,Navicat 仍会卡在 SASL 认证阶段。
- 用
gsql登录:gsql -d postgres -p 7654 -U your_user - 执行:
ALTER USER your_user WITH PASSWORD 'your_new_pass'; - 再查一遍
pg_authid,确认rolpassword变成了md5...开头
如果提示 NOTICE: The encrypted password contains MD5 ciphertext,说明成功了。
检查 pg_hba.conf 是否允许 md5 认证
编辑 /var/lib/opengauss/data/pg_hba.conf,确保有一条匹配你连接来源的规则,且方法是 md5:
host all all 0.0.0.0/0 md5
别只写 127.0.0.1/32,Navicat 默认可能走 IPv4 通配;也别写成 scram-sha-256 或 trust(后者绕过密码但不解决协议问题)。
改完记得 reload: gs_ctl reload -D /var/lib/opengauss/data
真正卡住人的地方从来不是“怎么改”,而是“改完以为好了,其实密码还是老格式”。只要 pg_authid 里没看到 md5 开头的哈希,连接就一定会失败——无论 Navicat 设置得多正确,无论防火墙开得多彻底。











