在pg_hba.conf文件中,“local”和“localhost”连接类型有什么区别?

3
这是我pg_hba.conf的相关部分:
# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     ident
# IPv4 local connections:
host    all             all             127.0.0.1/32            ident
# IPv6 local connections:
host    all             all             ::1/128                 ident

pidentd服务正在运行。

当我尝试登录ee1时(我假设默认用户为postgres):

psql ee1 

提示信息为“用户postgres的对等身份验证失败”

  1. Where have I configured peer authentication for "postgres" ? It's ident.

  2. When I change the following line in pg_hba.conf:

    local   all             all                                 ident
    

    to

    local   all             all                                 md5
    

    it asks me for a password, and I am able to log in. Why is it that making changes to the local connection type, have effect on postgres user?

2个回答

3
ident认证意味着您的操作系统用户与数据库用户匹配。正如文档中相关条目所述,它仅支持TCP/IP连接。如果与Unix套接字一起使用,则将使用Peer认证方法。

此外,请注意,默认用户不是postgres,而是您当前登录的用户。


我使用自己的用户名登录到系统中,为什么它会显示“用户'postgres'的对等身份验证失败”? - Daud

2
local是一个在pg_hba.conf中使用的连接类型,而localhost是本地回环的网络地址,对应于IPv4地址127.0.0.1或IPv6地址::1
我引用关于pg_hba.conf的手册:

local

这条规则用于匹配尝试使用Unix域套接字进行的连接。如果没有此类型的记录,则不允许使用Unix域套接字连接。

host

这个记录匹配使用TCP/IP进行的连接尝试。主机记录匹配SSL或非SSL连接尝试。

注意:除非服务器以适当的值为listen_addresses配置参数启动,否则远程TCP/IP连接将不可能,因为默认行为是仅在本地回环地址localhost上监听TCP/IP连接。

对于postgresql.conf中的GUC* listen_addresseslocalhost也可以作为设置:
* GUC: Grand Unified Configuration

默认值为localhost,这只允许本地TCP/IP“环回”连接。

我强调加粗部分。


我为“host”连接类型(使用环回地址)指定了md5,并尝试了“psql ee1”,它从未要求我输入密码,但当我为“local”连接类型指定md5时,它开始要求我输入密码。为什么会这样?我如何知道我是使用Unix套接字访问本地主机还是使用TCP/IP访问本地主机? - Daud
1
@Daud:如果您本地连接(例如,在同一台机器上使用 psql),则 pg_hba.conf 中的 host 设置无效,而 local 连接类型的设置是相关的。当您在连接中不提供网络地址时(因此,本地连接),您将自动使用 Unix 套接字。 - Erwin Brandstetter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接