PostgreSQL 认证与HBA

    在Pigsty中,所有实例的HBA都由配置文件生成而来,最终生成的HBA规则因实例的角色( )而不同。 Pigsty的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)