postgresql的pg_hba.conf

初识postgresql的时候,觉得它的连接认证真几把烦人。每次也都是直接在网上搜索复制,不求甚解。今天安装bucardo做双主复制的时候,又被这个连接认证搞的头疼。索性好好试验了一方,才发现网上根本就没人好好说过ident连接方式失败的原因,全是复制文。。。哎。

先贴上官方文档:https://www.postgresql.org/docs/10/auth-pg-hba-conf.html

在实际使用时候,通常只会用到下面这种格式:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

首先需要知道的是,postgresql进行连接认证的时候是从pg_hba.conf文件中由上往下逐条匹配的,匹配到后就不会再往下找了。

接下来讲一下常用的几个字段的含义。

TYPE

local,表示使用unix socket的连接。当然这么说其实我也是不清不楚的,但是只需要知道在本机使用psql不加-h参数属于local类型

host,表示使用ip进行的连接。注意使用host类型,必须开启postgres.conf中的listen_addresses项。本机使用psql加-h参数属于host类型,所有其他通过服务器ip进行连接的都属于host类型。

 

DATABASE

允许连接的数据库名,可以用逗号分隔多个数据库名。

all 表示所有数据库。

replication 表示该连接是用来进行流复制。

 

USER

用户名,多个用户可以用逗号隔开。

all 表示所有用户。

 

ADDRESS

0.0.0.0/0 代表所有IPv4地址,

::0/0 代表所有IPv6地址,

172.20.143.89/32 表示一个主机,

172.20.143.0/24 表示一个网段。

 

METHOD

peer只用于local类型。表示使用当前的系统登录用户进行连接,并且要求postgresql库中必须有同名的用户。

ident,只用于host类型,有点类似于peer。表示使用从客户端的ident server获取当前用户进行连接,并且要求postgresql库中必须有同名用户。注意,千万别配置ident方式,因为一般系统是没有装这个ident server服务的!how to install ident server)你得到的只会是一个错误信息:”FATAL: Ident authentication failed for user xxx”

md5,使用密码进行连接(注意,默认的postgres用户是无密码的。所以想要用密码连接postgres用户,必须先设置它的密码

trust,无条件地允许连接

reject,拒绝连接

所以最常用的就是peer与md5方式(后续版本好像改成 scram-sha-256 了)。

 

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top