定制业务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)