客户端鉴权

172
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 对密码进行加密

内置规则

这三条规则分别表示 :

  • 本地 unix socket 连接:所有数据库、所有用户都是信任的,无需密码
  • 本地IPV4回环地址的TCP连接:所有数据库、所有用户都是信任的,无需密码
  • 本地IPV6回环地址的TCP连接:所有数据库、所有用户都是信任的,无需密码

自定义规则

现在,我们为 axum_rs 角色添加规则:

  • 允许所有 ipv4 连接
  • 允许所有 ipv6 连接
  • 使用 axum_rs 数据库
  • 需要指定密码,密码使用 md5 加密
#type database user address method
host axum_rs axum_rs 0.0.0.0/0 md5
host axum_rs axum_rs ::/0 md5