客户端鉴权

318
2023/08/01 14:29:24

本章将讨论 PostgreSQL 客户端鉴权。回到之前安装 PostgreSQL 时的一个问题,为什么在本地登录 PostgreSQL 时,不需要输入密码?本章将回答这个问题。

鉴权文件

PostgreSQL 的客户端鉴权由 pg_hba.conf 文件控制,它通常位于 PostgreSQL 数据目录下,比如 /var/lib/postgresql/data

  • TYPE:类型。指定客户端连接的类型
    • local:本地 unix socket 连接
    • hostipv4/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
  • 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 加密