客户端访问和认证受到标准的PostgreSQL的基于主机的认证文件(pg_hba.conf)的控制。在Greenplum数据库中,Master实例的pg_hba.conf文件控制对Greenplum数据库系统的客户端访问及认证。Greenplum数据库的Segment也有pg_hba.conf文件,它们被配置来只允许来自Master主机的客户端连接并且永不接受客户端连接。不要在Segment上更改pg_hba.conf文件。
pg_hba.conf文件的一般格式是一组记录,每行一个。一个记录由多个被空格或者制表符分隔的域组成。如果域值被加上引号,域可以包含空格。记录不能跨越多行。
每一行的格式为:
连接方式 连接的数据库 连接的用户 连接的主机IP 认证方式
每一个远程客户端访问记录具有如下的格式:
host database role CIDR-address authentication-method
每一个UNIX-域套接字记录具有如下的格式:
local database role authentication-method
连接方式有四种:local 、host、hostssl、hostnossl
local
这条记录匹配通过 Unix 域套接字进行的联接企图, 没有这种类型的记录,就不允许 Unix 域套接字的联接。
host
这条记录匹配通过TCP/IP网络进行的联接尝试。他既匹配通过ssl方式的连接,也匹配通过非ssl方式的连接。
注意:要使用该选项你要在postgresql.conf文件里设置listen_address选项,不在listen_address里的IP地址是无法匹配到的。因为默认的行为是只在localhost上监听本地连接。
hostssl
这条记录匹配通过在TCP/IP上进行的SSL联接企图。
要使用该选项,服务器编译时必须使用–with-openssl选项,并且在服务器启动时ssl设置是打开的,具体内容可见这里。
hostnossl
这个和上面的hostssl相反,只匹配通过在TCP/IP上进行的非SSL联接企图。
指定这一记录匹配的数据库名。值all指定它匹配所有数据库。可以提供多个数据库名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有数据库名的单独的文件。
指定这一记录匹配的数据库角色名。值all指定它匹配所有角色。如果指定的角色是一个组并且希望该组中的所有成员都被包括在内,在该角色名前面放一个+。可以提供多个角色名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有角色名的单独的文件。
指定这一记录匹配的客户端机器的IP地址范围。它包含一个标准点分十进制表示的IP地址和一个CIDR掩码长度。IP地址只能用数字指定,不能写成域或者主机名。掩码长度指示客户端IP地址必须匹配的高位位数。给定IP地址中,在这些位的右边必须是零。IP地址、/和CIDR掩码长度之间不能有任何空格。
典型的CIDR地址例子是:192.0.2.89/32是一个单一主机,192.0.2.0/24是一个小网络,10.6.0.0/16是一个大网络。要指定一个单一主机,对IPv4使用一个CIDR掩码32,对IPv6使用128。在一个网络地址中,不要省略拖尾的零。
这两个字段包含可以看成是标准点分十进制表示的 IP地址/掩码值的一个替代。
例如,使用255.255.255.0 代表一个24位的子网掩码。它们俩放在一起,声明了这条记录匹配的客户机的 IP 地址或者一个IP地址范围。本选项只能在连接方式是host,hostssl或者hostnossl的时候指定。
常用的认证方法有:
trust
无条件地允许联接,这个方法允许任何可以与PostgreSQL 数据库联接的用户以他们期望的任意 PostgreSQL 数据库用户身份进行联接,而不需要口令。
reject
联接无条件拒绝,常用于从一个组中"过滤"某些主机。
md5
要求客户端提供一个 MD5 加密的口令进行认证,这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法。
password
和"md5"一样,但是口令是以明文形式在网络上传递的,我们不应该在不安全的网络上使用这个方式。
# TYPE DATABASE USER ADDRESS METHOD
host all all 10.10.56.17/32 md5
上述表示允许IP地址为10.10.56.17的所有用户可以通过MD5的密码验证方式连接主机上所有的数据库。
# TYPE DATABASE USER ADDRESS METHOD
host test pgtest 10.10.56.17/32 md5
上述表示允许地址为 10.10.56.17 的用户 pgtest通过 MD5加密方式连接主机上的 test 数据库。
host all all 10.1.1.0/24 md5
上述表示允许10.1.1.0~10.1.1.255网段登录数据库。
host test pgtest 0.0.0.0/0 trust
表示任意IP地址的用户 pgtest 无需密码验证可直接连接访问该主机的 test 数据库。
pg_hba.conf修改后,使用pg_ctl reload重新读取pg_hba.conf文件使其生效。在greenplum中,使用gpstop -u
命令来重新装载pg_hba.conf配置文件来让更改生效。
参考:
1.https://gp-docs-cn.github.io/docs/admin_guide/client_auth.html
2.https://blog.csdn.net/yaoqiancuo3276/article/details/80404883
3.https://www.cnblogs.com/flying-tiger/p/5983588.html
4.https://www.cnblogs.com/hiloves/archive/2011/08/20/2147043.html