1. PostgreSQL访问控制的核心:pg_hba.conf深度解析
作为PostgreSQL数据库管理员,我每天打交道最多的配置文件之一就是pg_hba.conf。这个看似简单的文本文件,实际上掌握着数据库访问的生杀大权。它就像数据库门口的保安队长,严格审查每一个来访者的身份,决定是热情迎接还是直接拒之门外。
1.1 pg_hba.conf的工作原理
pg_hba.conf(Host-Based Authentication)采用自上而下的匹配机制。当一个连接请求到来时,PostgreSQL会从文件的第一行开始逐行检查,直到找到第一个匹配的连接类型、数据库、用户名和客户端地址组合的记录,然后应用该记录指定的认证方法。
这种"首次匹配即生效"的特性意味着:
- 规则的顺序至关重要,一个放得太靠前的宽松规则可能意外覆盖后续的限制规则
- 需要把最具体的规则放在前面,通用的规则放在后面
- 即使后续有更匹配的规则,只要前面有规则匹配了就不会再检查
1.2 文件基本结构解析
典型的pg_hba.conf记录包含5个字段,以空格或制表符分隔:
code复制# TYPE DATABASE USER ADDRESS METHOD
host appdb appuser 192.0.2.0/24 scram-sha-256
各字段含义如下:
-
TYPE:连接类型,常见有:
local:Unix域套接字连接host:TCP/IP连接(SSL可选)hostssl:必须使用SSL的TCP/IP连接hostnossl:不使用SSL的TCP/IP连接
-
DATABASE:指定规则适用的数据库名称
all:匹配所有数据库sameuser:数据库名与用户名相同samerole:用户是数据库同名角色的成员replication:流复制连接- 也可以指定具体的数据库名,如
appdb
-
USER:指定规则适用的用户名
all:匹配所有用户- 可以指定具体用户名或多个用户(用逗号分隔)
-
ADDRESS:客户端地址
- 对于TCP/IP连接,格式为
IP地址/掩码位数 0.0.0.0/0匹配所有IPv4地址::/0匹配所有IPv6地址- 对于local类型,此字段应留空
- 对于TCP/IP连接,格式为
-
METHOD:认证方法,常见有:
trust:无条件允许连接reject:无条件拒绝连接scram-sha-256:SCRAM-SHA-256密码认证(PostgreSQL 10+推荐)md5:MD5密码认证(旧版兼容)peer:从操作系
