“Ident authentication failed”错误源于pg_hba.conf中本地连接配置为ident或peer认证,而Navicat等客户端无法提供匹配的系统用户名;需将对应local或host行的METHOD改为md5或scram-sha-256,保存后重启PostgreSQL服务,并确保用户已设置密码。
为什么会出现“Ident authentication failed”错误
这个错误和 authentication method 10 不同,它通常出现在本地连接(比如 127.0.0.1 或 unix socket)时,postgresql 尝试用操作系统用户身份做映射验证,但 navicat 没传或没配对等的 ident 用户名。典型表现是:你填了正确的数据库用户名(如 postgres),密码也对,却提示 fatal: ident authentication failed for user "postgres"。
确认 pg_hba.conf 中当前生效的认证方式
打开你的 pg_hba.conf 文件(路径类似 C:\Program Files\PostgreSQL\17\data\pg_hba.conf),重点看匹配你连接方式的那几行:
- 如果是 Navicat 用
127.0.0.1连,找以host开头、ADDRESS列为127.0.0.1/32的行 - 如果是 Navicat 用本地 socket 连(没填主机名,默认走 Unix socket),找
local开头的行 - 检查
METHOD列是不是ident或peer—— 这俩都依赖系统用户,Navicat 无法满足
把 ident/peer 改成 md5 或 scram-sha-256
直接修改对应行的认证方法,换成客户端能处理的方式:
- 对本地 TCP 连接(
127.0.0.1/32):改成md5或scram-sha-256(后者需 Navicat ≥16 或手动更新驱动) - 对本地 socket 连接(
local行):同样改成md5,避免依赖系统用户 - 示例修改前:
local all all ident - 示例修改后:
local all all md5
改完务必保存,并重启 PostgreSQL 服务(Windows 下在 services.msc 中重启 postgresql-x64-17 类似名称的服务)。
容易被忽略的关键点
很多人改完 pg_hba.conf 就以为万事大吉,结果还是失败,问题常出在:
- 没重启服务 —— 配置文件修改后不重启,PostgreSQL 完全不会加载新规则
- 改错了行 ——
pg_hba.conf是按顺序匹配的,上面更宽泛的规则(比如host all all 0.0.0.0/0)可能先命中,导致你改的那行根本没生效 - Navicat 连接时用了“无主机名”模式 —— 这会触发
local规则,而不是你改的host行,所以local行也得同步改 - 密码本身没设 ——
md5要求用户有密码,用psql执行ALTER USER postgres PASSWORD 'xxx';确保密码已设置











