结论是Navicat连接PostgreSQL报“no pg_hba.conf entry”错误,根本原因是pg_hba.conf中无匹配客户端IP、用户、数据库及SSL状态的规则;常见因规则顺序错、IP网段不匹配、未重载配置或listen_addresses未放开所致。
直接说结论:这个错误不是navicat的问题,而是postgresql明确拒绝了你的连接请求——它在pg_hba.conf里没找到匹配你ip、用户、数据库和ssl状态的那一条规则。
pg_hba.conf还是报错常见现象是加了一行host all all 192.168.1.0/24 md5,保存后Navicat仍报FATAL: no pg_hba.conf entry for host "192.168.1.100"。原因往往有这几个:
hostnossl或reject规则提前拦截,后面新增的host根本没机会匹配172.20.10.0/28),你却填了192.168.1.0/24
hostssl但Navicat没开SSL,或开了SSL但服务器没配证书,导致匹配失败sudo systemctl reload postgresql比重启更轻量,但必须执行;只保存文件不生效pg_hba.conf该加哪一行才真正起作用别盲目抄“host all all 0.0.0.0/0 md5”,生产环境极不安全。按实际场景选:
host all all 192.168.1.0/24 md5 —— 先用ipconfig或ifconfig确认客户端真实网段host all all 192.168.1.100/32 md5 —— /32 表示精确匹配一个IPhostssl all all 0.0.0.0/0 cert 或 hostssl all all 0.0.0.0/0 md5,对应Navicat里SSL Mode选require或verify-full
host all all 127.0.0.1/32 trust验证本机是否通,但别留着所有规则必须加在# IPv4 local connections:之后、其他host规则之前,避免被上面的local或host规则覆盖。
Navicat里填的每个字段,都得和PostgreSQL当前配置咬合:
localhost或127.0.0.1(除非你在服务端本机连)5432,但若postgresql.conf里改过port = 5433,这里就得同步改CREATEROLE或LOGIN权限限制pg_hba.conf里只有hostssl规则,这里必须选require;若选disable,哪怕IP匹配也会被拒md5认证时必须输对;用trust时Navicat里可以不填,但不建议线上用很多人卡在最后一步,其实问题早埋好了:
postgresql.conf里listen_addresses还是'localhost',没改成'0.0.0.0'或具体网段,导致根本收不到局域网来的包ufw或firewalld)或Windows防火墙拦了5432端口,Navicat连不上就超时,不报no pg_hba.conf entry,但容易误判TCP:5432入方向,本地防火墙全放行也没用——安全组才是第一道门查日志最准:tail -f /var/log/postgresql/postgresql-*.log,里面会明确写“connection rejected by pg_hba.conf”还是“connection timeout”,别光盯着Navicat弹窗。