pg_hba.conf中“local”和“localhost”连接类型之间有什么区别?

时间:2012-08-11 10:28:40

标签: postgresql connection localhost

这是我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. 我在哪里为“postgres”配置了peer身份验证?这是ident

  2. 当我更改pg_hba.conf中的以下行时:

    local   all             all                                 ident
    

    local   all             all                                 md5
    

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

2 个答案:

答案 0 :(得分:3)

ident身份验证表示您的操作系统用户与数据库用户匹配。它仅支持作为relevant entry in docs states的TCP / IP连接。如果与Unix套接字一起使用,将使用Peer authentication方法。

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

答案 1 :(得分:2)

local是pg_hba.conf中使用的连接类型,而localhost是本地环回的网络地址,并转换为IPv4地址127.0.0.1或IPv6 ::1
我引用the manual about pg_hba.conf

  

本地

     

此记录匹配使用Unix域套接字的连接尝试。没有这种类型的记录,Unix域套接字连接是   禁止。

     

宿主

     

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

     

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

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

  

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

大胆强调我的。