PostgreSQL本地连接密码认证失败问题求助
解决PostgreSQL本地连接密码验证失败的问题
别急,我来帮你一步步排查这个FATAL: password authentification failed的问题,结合你提供的信息,我们可以从这几个方向入手:
1. 先确保PostgreSQL服务加载了新的配置
你已经把pg_hba.conf里的验证方式改成了md5,但修改配置后必须重启PostgreSQL服务才能生效,这是很多新手容易忽略的关键点。在Ubuntu 16.04上,执行以下命令重启服务:
sudo service postgresql restart
或者用systemctl命令:
sudo systemctl restart postgresql
2. 验证用户antoine的密码是否正确设置
虽然你执行了设置密码的命令,但有可能操作过程中出现了疏漏。我们可以用超级用户postgres登录psql,检查用户的密码状态:
首先进入postgres的psql终端:
sudo -u postgres psql
然后执行查询语句:
SELECT usename, passwd FROM pg_shadow WHERE usename = 'antoine';
如果passwd字段显示的是一串md5开头的加密字符串,说明密码设置成功;如果是空值,那你需要重新执行密码设置命令:
ALTER USER antoine WITH ENCRYPTED PASSWORD '123';
执行完后输入\q退出psql即可。
3. 检查pg_hba.conf的规则顺序是否合理
pg_hba.conf的规则是从上到下匹配的,前面的规则会优先生效。看你提供的配置内容,注释掉了默认的peer规则,然后依次设置了:
- Unix socket连接(
local)用md5 - IPv4本地连接(
127.0.0.1/32)用md5 - IPv6本地连接(
::1/128)用md5
这个顺序是没问题的,不会有优先级更高的规则覆盖你的设置。
4. 测试不同连接方式定位问题
你可以先尝试不用-h localhost的方式连接(也就是用Unix socket连接),看看是否能成功:
psql -U antoine -d cpf_ietest
如果这个命令能正常登录,说明TCP/IP连接的配置可能还有细节问题;如果同样失败,那大概率是密码设置或者服务没重启的问题。
5. 确认用户和数据库确实存在
最后再确认一下你创建的用户和数据库是否真的存在,避免拼写错误:
用postgres用户执行:
sudo -u postgres psql -c "SELECT 1 FROM pg_user WHERE usename='antoine';"
如果返回1,说明用户存在;再检查数据库:
sudo -u postgres psql -c "SELECT 1 FROM pg_database WHERE datname='cpf_ietest';"
同样返回1说明数据库存在。
按照上面的步骤排查后,应该就能解决密码验证失败的问题了。
内容的提问来源于stack exchange,提问作者Roux
相关产品推荐
相关产品推荐

