postgresql中的用户对等身份验证失败

use*_*919 3 authentication postgresql

我试图通过结构脚本运行一些postgresql命令.当我执行脚本时,我得到:

out: psql: FATAL:  Peer authentication failed for user "sparc2"
Run Code Online (Sandbox Code Playgroud)

这就是我的pg_hba.conf文件的样子:

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5
# added
local   sparc2          sparc2                                  md5
host    sparc2          sparc2           127.0.0.1/32           md5
host    sparc2          sparc2           10.0.2.2/32            md5
host    all             all              all                    password
Run Code Online (Sandbox Code Playgroud)

我还修改了postgresql.conf文件并添加了这一行:

listen_addresses = '*'
Run Code Online (Sandbox Code Playgroud)

应用更改后,我重新启动了postgresql.但错误仍然是一样的.

fil*_*rem 8

PostgreSQL有2个连接入口点:

  1. TCP/IP(host在pg_hba.conf中)
  2. Unix套接字(local在pg_hba.conf中)

您的服务器配置为使用peer仅适用于Unix套接字的auth,并且意味着 - 询问内核OS用户名是否与DB用户名匹配.

您有以下选择:

  • 更改pg_hba.conf为使用md5auth进行local套接字连接,或
  • 更改脚本中的连接设置以使用IP连接(127.0.0.1应该可以)而不是套接字连接.[这可能不需要编辑文件 - 有时设置PGHOST变量就足够了],或者
  • 使您的脚本从OS用户运行sparc2,而不是postgres.

风险/弊端

  • 如果你将peer更改为md5,那么从"postgres"操作系统用户运行并依赖"peer"auth的某些自动化脚本将停止工作.他们会开始要求输入密码
  • 如果您将peer更改为md5,并忘记了数据库超级用户密码,则可能必须重新启用peer auth才能重置它.

通常,"peer"auth是可以的.基于内核的本地身份验证的易用性和安全性是许多发行版为本地管理连接选择它的原因.它尤其适用于多用户shell服务器.您只能为选定的帐户停用它:

#CHANNEL  DB    USER     METHOD
local     all   sparc2   md5
local     all   all      peer
Run Code Online (Sandbox Code Playgroud)

更多细节:这里和这里.