"local"和"localhost"在pg_hba.conf中的连接类型有什么区别?

8 浏览
0 Comments

"local"和"localhost"在pg_hba.conf中的连接类型有什么区别?

这是我pg_hba.conf文件的相关部分:

# 类型  数据库        用户            地址                 认证方法
# "local"仅适用于Unix域套接字连接
local   all             all                                     ident
# IPv4本地连接:
host    all             all             127.0.0.1/32            ident
# IPv6本地连接:
host    all             all             ::1/128                 ident

pidentd服务正在运行。

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

psql ee1

它显示"用户postgres的对等认证失败"。

  1. 我在哪里为"postgres"配置了peer认证?是ident
  2. 当我将pg_hba.conf中的以下行更改为:

    local   all             all                                 ident
    

    local all all md5

    它会要求我输入密码,我可以成功登录。为什么更改本地连接类型会影响postgres用户?

0
0 Comments

在pg_hba.conf文件中,"local"是一种连接类型,而"localhost"是本地环回地址的网络地址,对应的是IPv4地址"127.0.0.1"或者IPv6地址"::1"。

关于pg_hba.conf的说明来自于官方文档:

"local"记录用于匹配使用Unix域套接字的连接尝试。如果没有这种类型的记录,将禁止Unix域套接字连接。

"host"记录用于匹配使用TCP/IP的连接尝试。host记录匹配SSL或非SSL的连接尝试。

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

关于postgresql.conf中的listen_addresses配置参数,默认值为localhost,这只允许进行本地TCP/IP的"loopback"连接。

我在指定使用环回地址的host连接类型时设置为md5,并尝试使用"psql ee1"命令,但它从未要求我输入密码。当我指定使用local连接类型时设置为md5时,它开始要求我输入密码。为什么会这样?我如何知道我是使用Unix套接字访问localhost还是使用TCP/IP访问localhost?

如果您在本地连接(例如在同一台机器上使用psql),则pg_hba.conf文件中host连接类型的设置是无效的,而local连接类型的设置是相关的。当您在连接中不提供网络地址(因此在本地连接)时,将自动使用Unix套接字。

0
0 Comments

在pg_hba.conf文件中,有两种连接类型:local和localhost。这两种连接类型在认证方式上有所不同。

local连接类型使用ident认证方式。这意味着操作系统用户必须与数据库用户匹配。这种认证方式仅支持TCP/IP连接,如果使用Unix套接字连接,则会使用Peer认证方式。

需要注意的是,默认用户不是“postgres”,而是当前登录的用户。

当使用local连接类型时,如果出现“peer authentication failed for user 'postgres'”的错误提示,可能是因为当前登录的用户与数据库用户不匹配。

解决方法:将pg_hba.conf文件中的认证方式改为其他方式,如md5或password。

0