连接pgsql报认证错误解决方法
閱讀時間:全文 493 字,預估用時 3 分鐘
創作日期:2017-05-06
上篇文章:Django的执行流程
下篇文章:csv转xlsx
BEGIN
问题来源
pgsql安装后使用psql -U deploy -t test -W
登录数据库失败.
报错信息: psql: FATAL: Peer authentication failed for user "deploy"
中文翻译: psql: 失败: 用户deploy的Peer认证失败
其中表test已存在,且deploy有登录权限.
解决
google搜索报错信息,在stackoverflow中有人建议查看网页(https://help.ubuntu.com/stable/serverguide/postgresql.html 🔗).
根据页面信息解决方法如下:
sudo vim /etc/postgresql/9.5/main/pg_hba.conf
- 可以看到文件的如下信息(为了方便阅读,做成表格形式,其中第一列为自添加):
行 | TYPE | DATABASE | USER | ADDRESS | METHOD |
---|---|---|---|---|---|
1 | local | all | postgres | peer | |
2 | local | all | all | peer | |
3 | host | all | all | 127.0.0.1/32 | md5 |
4 | host | all | all | ::1/128 | md5 |
- 系统管理员的认证配置,ADDRESS默认本地.
- 普通用户的认证配置,ADDRESS默认本地.
- ipv4方式登录的认证配置.
- ipv6方式登录的认证配置.
其中字段:
- TYPE: 登录方式,local为本地登录,host为远程主机(带host及端口)登录.
- DATABASE: 应用的数据库,all表示应用所有数据库.
- USER: 应用的用户,all表示应用所有用户.
- ADDRESS: 用户指定主机名及端口.
- METHOD: 登录方式,peer指要在当前用户下才能登录,即要先
su username
再登录,md5表示请密码方式登录.
读到这里想必执行psql -U deploy -t test -W
报错的原因找到了,只要修改1和2行中的peer为md5就可以解决.
修改后保存退出,并重启pgsql服务器: sudo /etc/init.d/postgres restart
或用systemctl管理的可以执行sudo systemctl restart postgresql.service
.
补充问题
发现远程登录的方式明明是md5的密码方式还是会报错.这是由于pgsql的配置中只允许本地登录,解决方法如下:
sudo vim /etc/postgresql/9.5/main/postgresql.conf
- 把
listen_addresses = 'localhost'
更改成listen_addresses = '*'
,问题解决.
5月9号补充
md5密码方式登录的前提是在数据库中设置用户的数据库权限密码,否则会报密码错误权限。
postgres用户登录后执行:alter role deploy with password 'deploy123';
, 其中deploy为用户名。
FINISH
上篇文章:Django的执行流程
下篇文章:csv转xlsx