Ubuntu下PostgreSQL创建数据库遇Peer authentication failed及为角色mark建rates库方法
解决Ubuntu上PostgreSQL Peer身份验证失败问题
这个Peer认证失败的坑在Ubuntu环境下用PostgreSQL真的太常见了,本质是因为Ubuntu默认给本地PostgreSQL连接用的是Peer认证——它要求你的系统用户名和PostgreSQL里的角色名完全一致,而且不需要密码,靠系统用户身份直接验证。如果你的系统用户不是mark,或者想改用密码验证,就会触发这个错误。下面给你两个实用的解决办法:
方法1:通过Postgres超级用户代操作(无需修改配置)
这是最稳妥的方式,不用动任何配置文件:
- 先切换到系统自带的
postgres超级用户:sudo su - postgres - 进入PostgreSQL的命令行交互界面:
psql - 如果你还没给
mark角色添加登录权限(默认创建的角色可能没有),先执行:
(如果ALTER ROLE mark WITH LOGIN PASSWORD '你的安全密码';mark角色还没创建,就用CREATE ROLE mark WITH LOGIN PASSWORD '你的密码';) - 然后创建
rates数据库并指定所有者为mark:CREATE DATABASE rates OWNER mark; - 退出psql:输入
\q回车,再退出postgres用户:exit
之后你就可以用mark角色登录这个数据库了,比如:
psql -U mark -d rates
方法2:修改认证配置,允许密码登录
如果你想直接用mark系统用户(或者任意用户)通过密码连接PostgreSQL,可以修改认证规则:
- 先找到
pg_hba.conf的准确路径,在终端执行:
通常Ubuntu上的路径是psql -U postgres -c "SHOW hba_file;"/etc/postgresql/[你的PostgreSQL版本]/main/pg_hba.conf(比如/etc/postgresql/14/main/pg_hba.conf) - 用sudo编辑这个文件:
sudo nano /etc/postgresql/14/main/pg_hba.conf - 找到文件里类似这样的行:
local all all peer
把它改成更安全的scram-sha-256认证(或者旧版的md5,但推荐scram):
local all all scram-sha-256
如果你只想给mark角色和rates数据库开权限,可以更精准地写:
local rates mark scram-sha-256 - 保存文件(nano里按
Ctrl+O回车,再Ctrl+X退出),然后重启PostgreSQL服务生效:sudo systemctl restart postgresql - 现在你可以直接用
mark角色连接了,比如:
输入你之前给psql -U mark -d ratesmark设置的密码就行。
额外注意点
- 如果你的系统里还没有
mark这个用户,得先创建:sudo adduser mark,然后切换到这个用户操作会更顺畅。 - 如果你想让
mark能自己创建数据库,记得给它加权限:在psql里执行ALTER ROLE mark CREATEDB;
内容的提问来源于stack exchange,提问作者MikiBelavista
相关产品推荐
相关产品推荐

