本章将讨论 PostgreSQL 客户端鉴权。回到之前安装 PostgreSQL 时的一个问题,为什么在本地登录 PostgreSQL 时,不需要输入密码?本章将回答这个问题。
鉴权文件
PostgreSQL 的客户端鉴权由 pg_hba.conf
文件控制,它通常位于 PostgreSQL 数据目录下,比如 /var/lib/postgresql/data
。
TYPE
:类型。指定客户端连接的类型local
:本地 unix socket 连接host
:ipv4/ipv6
的TCP连接
DATABASE
:数据库,指定客户端可连接的数据库。如果允许全部数据库,则使用all
USER
:用户,指定客户端连接使用的角色名。如果允许全部角色,则使用all
ADDRESS
:允许发起连接的客户端IP- ipv4:
- 本机:
127.0.0.1/32
- 所有IP:
0.0.0.0/0
- 本机:
- ipv6:
- 本机:
::1/128
- 所有IP:
::/0
- 本机:
- ipv4:
METHOD
:鉴权方式。常用的有两种:trust
:信任客户端,无需密码即可连接。通常用于本地连接md5
:需要密码连接,使用 MD5 对密码进行加密
是否启用 TLS 不是由该文件控制,而是由
postgres.conf
控制
内置规则
让我们看一下内置规则:
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
- 本地 unix socket 连接:所有数据库、所有用户都是信任的,无需密码
- 本地IPV4回环地址的TCP连接:所有数据库、所有用户都是信任的,无需密码
- 本地IPV6回环地址的TCP连接:所有数据库、所有用户都是信任的,无需密码
自定义规则
现在,我们为 axum_rs
角色添加规则:
- 允许所有 ipv4 连接
- 允许所有 ipv6 连接
- 使用
axum_rs
数据库 - 需要指定密码,密码使用
md5
加密