pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者间的关系:
1.pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者关系
pg_hba.conf 是 PostgreSQL 数据库的客户端认证配置文件,用于对访问 PostgreSQL 数据库的请求实施访问认证控制。
pool_hba.conf 是 PGPool-II 中间件的客户端认证配置文件,用于对访问 PGPool-II 中间件的请求实施访问认证控制。同时,因为 PGPool-II 从架构上位于 PostgreSQL 之前,因此请求需要先通过 PGPool-II 的认证控制,随后通过 PostgreSQL 的认证控制。
pool_passwd 是 PGPool-II 的认证文件。一方面,由于 PGPool-II 无法获取 PostgreSQL 数据库上的用户密码信息,因此其通过检查 pool_passwd 内用户名及密码的方式,校验请求输入的用户名及密码是否正确。另一方面,当请求通过 PGPool-II 认证后,PGPool-II 将利用 pool_passwd 内保存的用户名及密码,连接后端 PostgreSQL 数据库,进行请求。(待验证)
2.pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者对认证结果的影响
以 md5 认证控制方式为例,pg_hba.conf、pool_hba.conf 以及 pool_passwd 三者对认证结果的影响如下表所示。
pg_hba.conf 设置的认证控制方式 | pool_hba.conf 设置的认证控制方式 | 用户密码值是否存在于pool_passwd | 结果 |
md5 | md5 | yes | PGPool-II 及 PostgreSQL 层面均进行 md5 认证。 |
md5 | md5 | no | PGPool-II 及 PostgreSQL 层面均进行 md5 认证,但由于用户密码没有保存于 pool_passwd 文件中,导致 PGPool-II 层验证失败,报错 "MD5" authentication with pgpool failed for user "XX" |
md5 | trust | yes/no | 当 PGPool-II 工作于复制、主备、并行等模式时,无法进行 md5 认证。PGPool-II 接收到请求后,直接利用 pool_passwd 内的用户密码值,对后端 PostgreSQL 进行请求。 对于非上述情况的,则采用 md5 认证。 |
trust | md5 | yes | PGPool-II 层面验证成功,直接对无须验证的 PostgreSQL 后端数据库发起请求。 |
trust | md5 | no | PGPool-II 层面验证失败,报错 "MD5" authentication with pgpool failed for user "XX" |
trust | trust | yes/no | 不做任何验证。 |
参考资料:
(1).https://pgpool.net/mediawiki/index.php/FAQ#I_created_pool_hba.conf_and_pool_passwd_to_enable_md5_authentication_through_pgpool-II_but_it_does_not_work._Why.3F