定制业务ACL
配置Pigsty中的业务用户
	       
	PostgreSQL中的ACL包括两部分,用户权限体系(Privileges) 与 Host Based Authentication (HBA)
Pigsty提供了默认访问控制系统,用户可在此基础上进一步定制,与ACL相关的配置项包括:
| 名称 | 类型 | 层级 | 说明 | 
|---|---|---|---|
| pg_default_roles | role[] | G | 默认创建的角色与用户 | 
| pg_default_privilegs | string[] | G | 数据库默认权限配置 | 
| pg_hba_rules | rule[] | G | 全局HBA规则 | 
| pg_hba_rules_extra | rule[] | C/I | 集群/实例特定的HBA规则 | 
| pgbouncer_hba_rules | rule[] | G/C | Pgbouncer全局HBA规则 | 
| pgbouncer_hba_rules_extra | rule[] | G/C | Pgbounce特定HBA规则 | 
| pg_users | user[] | C | 业务用户 | 
| pg_databases | database[] | C | 业务数据库 | 
HBA规则
用户可以通过 pg_hba_rules 与 pg_hba_rules_extra 定制 Postgres的HBA规则,通过 pgbouncer_hba_rules 与 pgbouncer_hba_rules_extra 定制Pgbouncer的HBA规则。
一条HBA规则是一个对象,包含3个必选字段:title,role,rules。
title: intranet password access
role: common
rules:
  - host   all          all                     10.0.0.0/8      md5
  - host   all          all                     172.16.0.0/12   md5
  - host   all          all                     192.168.0.0/16  md5
- title是这条规则的说明,会被渲染为注释信息。
- role是这条规则的应用范围,
- rules是具体的HBA规则数组,每一个元素都是一条规则五元组,请参考PG官方文档。
这样的一条规则,会被渲染至/pg/data/pg_hba.conf文件中。
#  allow intranet password access
host    all             all                 10.0.0.0/8          md5
host    all             all                 172.16.0.0/12       md5
host    all             all                 192.168.0.0/16      md5
规则的应用范围
规则的 role 用于控制规则安装的位置。
role = common的HBA规则组会安装到所有的实例上,而其他的取值,例如(role : primary)则只会安装至pg_role = primary的实例上。因此用户可以通过角色体系定义灵活的HBA规则。
作为一个特例,role: offline 的HBA规则,除了会安装至pg_role == 'offline'的实例,也会安装至pg_offline_query == true的实例上,允许离线用户访问。
规则的应用顺序
定义的HBA规则按照以下顺序生效:
- pg_hba_rules.common :通用规则(所有角色)
- pg_hba_rules_extra.common:特定规则(所有角色)
- pg_hba_rules_extra.role:特定规则(实例角色)
- pg_hba_rules.role :通用规则(实例角色)
特别注意
请注意,因为在实际生产应用中,通常会基于实例的角色,对HBA进行区分与细化管理。Pigsty不建议通过Patroni管理HBA配置。如果配置了Patroni中的HBA规则,数据库的HBA会在重启时被Patroni所覆盖。
最后修改 2021-03-25: update deploy/config (2148ae0)