Ubuntu20.04下PostgreSQL新建用户blog出现Peer认证失败报错如何解决
报错原因
- 第一个
sudo: unknown user: blog报错:你通过CREATE USER创建的是PostgreSQL内部的数据库角色,不属于Linux操作系统的用户体系,sudo -u只能切换系统层面已存在的用户,因此会识别不到blog用户。 - 第二个
Peer authentication failed for user "blog"报错:Ubuntu环境下PostgreSQL默认对本地Unix套接字连接使用peer认证规则,要求发起连接的Linux系统用户名与要登录的PostgreSQL用户名完全一致才允许通过,你当前使用的普通系统账号和PostgreSQL的blog用户名称不匹配,因此认证失败。
解决方案
按需选择以下适配方案即可:
方案1:临时密码登录(无需修改配置)
登录时指定走本地TCP连接,触发密码认证规则,执行以下命令后输入你创建blog用户时设置的密码即可登录:psql -h 127.0.0.1 -U blog blog
方案2:永久修改本地认证规则(开发环境推荐)
修改PostgreSQL的访问控制配置,将本地默认的peer认证改为密码认证,适配多用户登录需求:
- 编辑pg_hba.conf配置文件:
sudo nano /etc/postgresql/13/main/pg_hba.conf - 找到如下配置行:
local all all peer
将末尾的peer修改为scram-sha-256(PostgreSQL 10+推荐)或md5
- 保存退出后重启PostgreSQL服务生效:
sudo systemctl restart postgresql - 后续即可直接用以下命令登录:
psql -U blog blog
方案3:Django项目专用适配
如果只需让Django正常连接该数据库,无需修改全局认证规则,直接在Django的settings.py中指定数据库HOST为127.0.0.1即可,参考配置:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'blog', 'USER': 'blog', 'PASSWORD': '你创建blog用户时设置的密码', 'HOST': '127.0.0.1', 'PORT': '5432', } }
内容的提问来源于stack exchange,提问作者Chuck_Dexter_Ward
相关产品推荐
相关产品推荐

