使用postgres角色执行psql命令:认证失败与成功的命令差异解析
两条PostgreSQL psql命令的差异及认证问题解析
命令核心差异
sudo psql -U postgres:以当前操作系统用户的身份执行sudo,启动psql时指定数据库用户为postgres。此时发起PostgreSQL连接的操作系统用户仍是你自己,并非postgres。sudo -u postgres psql:先通过sudo切换到操作系统用户postgres,再以该用户身份启动psql。此时发起连接的操作系统用户就是postgres,psql默认会用当前操作系统用户名作为数据库连接用户。
认证成功/失败的原因
PostgreSQL本地unix socket连接默认采用peer认证,核心规则是:验证发起连接的操作系统用户名与请求的数据库用户名是否一致。
- 第一条命令中,你的操作系统用户名和指定的数据库用户
postgres不匹配,peer认证不通过,因此抛出「Peer authentication failed for user "postgres"」错误。 - 第二条命令中,切换到OS用户
postgres后,psql默认使用该用户名作为数据库用户,两者完全一致,符合peer认证规则,所以连接成功。
内容的提问来源于stack exchange,提问作者ldhoax
相关产品推荐
相关产品推荐

