当前位置: 首页 > 知识库问答 >
问题:

psql:致命:用户“dev”的对等身份验证失败

饶志
2023-03-14

当我创建一个新用户,但它无法登录数据库时。
我这样做:

postgres@Aspire:/home/XXX$ createuser dev
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) y

然后创建一个数据库:

postgres@Aspire:/home/XXX$ createdb -O dev test_development

之后,我尝试psql-U dev-W test_development登录,但出现错误:

psql: FATAL:  Peer authentication failed for user "dev"

我试图解决这个问题,但失败了。

共有3个答案

汤兴生
2023-03-14

对等身份验证意味着postgres向操作系统询问您的登录名,并将其用于身份验证。要使用postgres上的对等身份验证以用户“dev”身份登录,您还必须是操作系统上的用户“dev”。

您可以在Postgresql留档中找到身份验证方法的详细信息。

提示:如果身份验证方法不再有效,请断开服务器与网络的连接,并使用“本地主机”的“信任”方法(并在启用“信任”方法时,再次检查服务器是否无法通过网络访问)。

杜昆琦
2023-03-14

您的连接失败,因为默认情况下,psql使用peer身份验证通过UNIX套接字连接,这要求当前UNIX用户具有与psql相同的用户名。因此,您必须创建UNIX用户dev,然后以dev身份登录,或者使用sudo-u dev psql test\u development访问数据库(并且psql不应要求密码)。

如果您不能或不想创建UNIX用户,比如只想连接到数据库进行特殊查询,那么使用psql--host=localhost--dbname=test\u development--username=dev(正如@meyerson answer所指出的)强制套接字连接将解决您眼前的问题。

但是,如果要通过Unix套接字而不是对等方法强制进行密码身份验证,请尝试更改以下pg_hba.conf*行:

从…起

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          peer

# TYPE DATABASE USER ADDRESS METHOD
local  all      all          md5

>

  • 对等体表示它将信任UNIX用户的身份(真实性)。所以不要问密码。

    md5意味着它将始终请求密码,并在使用MD5进行散列后验证它。

    当然,您还可以为特定的数据库或用户创建更具体的规则,其中一些用户具有peer,而其他用户需要密码。

    在更改pg_hba.conf后,如果PostgreSQL正在运行,您需要通过重新加载(pg_ctlreload)或重新启动(sudo service postgresql restart)来重新读取配置。

    *文件pg_hba.conf很可能位于/etc/postgresql/9.x/main/pg_hba.conf

    编辑:来自@Chloe、@JavierEH、@Jonas-Eicher、@fccoelho、@Joanis、@Uphill_的评论纳入了答案。

  • 程吕恭
    2023-03-14

    尝试:

    psql -U user_name  -h 127.0.0.1 -d db_name
    

    在哪里

    • -U数据库用户名
    • -h是本地服务器的主机名/IP,从而避免Unix域套接字
    • -d是要连接的库名

    然后,Postgresql将其评估为“网络”连接,而不是Unix域套接字连接,因此不会像您在pg_hba.conf中看到的那样评估为“本地”连接:

    local   all             all                                     peer
    
     类似资料: