客户端认证权限控制
本篇文章解释如何为Greenplum数据库配置客户端连接和认证。
当一个Greenplum数据库系统第一次被初始化时,该系统包含一个预定义的superuser角色。这个角色具有和初始化该Greenplum数据库系统的操作系统用户相同的名称。这个角色被称作gpadmin。默认情况下,该系统被配置为只允许来自gpadmin角色的到该数据库的本地连接。要允许任何其他角色连接或者允许来自远程主机的连接,需要配置Greenplum数据库来允许这类连接。
允许到Greenplum数据库的连接
客户端访问和认证受到标准的PostgreSQL的基于主机的认证文件(pg_hba.conf)的控制。在Greenplum数据库中,Master实例的pg_hba.conf文件控制对Greenplum数据库系统的客户端访问及认证。Greenplum数据库的Segment也有pg_hba.conf文件,它们被配置来只允许来自Master主机的客户端连接并且永不接受客户端连接。不要在Segment上更改pg_hba.conf文件。
pg_hba.conf文件的一般格式是一组记录,每行一个。空行和任何注释字符#之后的文本会被忽略。第一个匹配行会被用来认证。在第一个匹配之后,后续的记录不会被考虑。如果客户端不能用第一个匹配记录中指定的方法认证,该连接会被拒绝。一个记录由多个被空格或者制表符分隔的域组成。如果域值被加上引号,域可以包含空格。记录不能跨越多行。每一个远程客户端访问记录具有如下的格式:
host database role CIDR-address authentication-method
每一个UNIX-域套接字记录具有如下的格式:
local database role authentication-method
下面的表格描述了每个域的含义。
域 | 描述 |
---|---|
local | 匹配尝试使用UNIX-域套接字的连接。如果没有这种类型的记录,则UNIX-域套接字连接不被允许。 |
host | 匹配尝试使用TCP/IP的连接。除非用合适的listen_addresses服务器配置参数值启动,就不能进行远程TCP/IP连接。 |
hostssl | 匹配尝试使用TCP/IP建立的连接,但只有用SSL加密建立该连接时才允许。必须通过设置ssl配置参数在服务器启动时启用SSL |
hostnossl | 匹配在不使用SSL的TCP/IP上建立的连接尝试。 |
database | 指定这一记录匹配的数据库名。值all指定它匹配所有数据库。可以提供多个数据库名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有数据库名的单独的文件。 |
role | 指定这一记录匹配的数据库角色名。值all指定它匹配所有角色。如果指定的角色是一个组并且希望该组中的所有成员都被包括在内,在该角色名前面放一个+。可以提供多个角色名,用逗号分隔它们。在文件名前面放一个@,可以指定一个含有角色名的单独的文件。 |
CIDR-address | 指定这一记录匹配的客户端机器的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-address
IP-mask |
这些域可以被用作CIDR地址记号的一种替代。实际的掩码在一个单独的列中指定,而不是指定掩码长度。例如,255.255.255.255表示CIDR掩码长度32。这些域只适用于host、hostssl和hostnossl记录。 |
authentication-method | 指定连接时使用的认证方法。Greenplum支持PostgreSQL 9.0支持的认证方法。 |
编辑pg_hba.conf文件
这个例子展示了如何编辑Master的pg_hba.conf文件来允许所有主机上的远程客户端使用加密口令认证访问所有数据库。
编辑pg_hba.conf
- 在一个文本编辑器中打开文件$MASTER_DATA_DIRECTORY/pg_hba.conf。
- 对每一类想要允许的连接在该文件中增加一行。该文件中的记录会被顺序读取,因此记录的顺序是有意义的。典型的顺序是,越早出现的记录将具有越严格的连接匹配参数和越弱的认证方法,而越晚出现的记录将具有越宽松的匹配参数和越强的认证方法。例如:
# allow the gpadmin user local access to all databases # using ident authentication local all gpadmin ident sameuser host all gpadmin 127.0.0.1/32 ident host all gpadmin ::1/128 ident # allow the 'dba' role access to any database from any # host with IP address 192.168.x.x and use md5 encrypted # passwords to authenticate the user # Note that to use SHA-256 encryption, replace md5 with # password in the line below host all dba 192.168.0.0/32 md5 # allow all roles access to any database from any # host and use ldap to authenticate the user. Greenplum role # names must match the LDAP common name. host all all 192.168.0.0/32 ldap ldapserver=usldap1 ldapport=1389 ldapprefix="cn=" ldapsuffix=",ou=People,dc=company,dc=com"
- 保存并关闭该文件。
- 重新装载pg_hba.conf配置文件来让更改生效:
$ gpstop -u
host all all 10.181.12.0/24 md5
评论