PostgreSQL 认证与HBA
在Pigsty中,所有实例的HBA都由配置文件生成而来,最终生成的HBA规则因实例的角色( )而不同。 Pigsty的HBA由下列变量控制:
- pg_hba_rules: 环境统一的HBA规则
- : 特定于实例或集群的HBA规则
- pgbouncer_hba_rules: 连接池使用的HBA规则
每个变量都是由下列样式的规则组成的数组:
的HBA规则组会安装到所有的实例上,而其他的取值,例如(role : primary
)则只会安装至pg_role = primary
的实例上。因此用户可以通过角色体系定义灵活的HBA规则。
HBA的渲染优先级规则为:
hard_coded_rules
全局硬编码规则pg_hba_rules_extra.common
集群通用规则pg_hba_rules_extra.pg_role
集群角色规则pg_hba_rules.pg_role
全局角色规则- 集群离线规则
pg_hba_rules_extra.offline
全局离线规则pg_hba_rules.common
全局通用规则
在默认配置下,主库与从库会使用以下的HBA规则:
- 超级用户通过本地操作系统认证访问
- 复制用户可以从局域网段通过密码访问
- 监控用户可以通过本地访问
- 所有人都可以在元节点上使用密码访问
- 管理员可以从局域网通过密码访问
- 所有人都可以从内网通过密码访问
- 读写用户(生产业务账号)可以通过本地(连接池)访问 (部分访问控制转交连接池处理)
- 在从库上:只读用户(个人)可以从本地(连接池)访问。 (意味主库上拒绝只读用户连接)
pg_role == 'offline'
或带有pg_offline_query == true
的实例上,会添加允许分组用户访问的HBA规则。
默认HBA规则详情
HBA规则会在集群/实例初始化时自动生成。
当数据库集簇目录被销毁重建后,新副本会拥有和集群主库相同的HBA规则(因为从库的数据集簇目录是主库的二进制副本,而HBA规则也在数据集簇目录中)。 这通常不是用户期待的行为。您可以使用上面的命令针对特定实例进行HBA修复。
在Pigsty中,Pgbouncer亦使用HBA进行访问控制,用法与Postgres HBA基本一致
- : 特定于实例或集群的连接池HBA规则
默认的Pgbouncer HBA规则允许从本地和内网通过密码访问
最后修改 2022-05-27: init commit (1e3e284)