[新手教程]GreenPlum认证权限控制

ronpris
ronpris
ronpris
253
文章
1
评论
2020年3月25日15:22:07 1 614 3355字阅读11分11秒

客户端认证权限控制

本篇文章解释如何为Greenplum数据库配置客户端连接和认证。

当一个Greenplum数据库系统第一次被初始化时,该系统包含一个预定义的superuser角色。这个角色具有和初始化该Greenplum数据库系统的操作系统用户相同的名称。这个角色被称作gpadmin。默认情况下,该系统被配置为只允许来自gpadmin角色的到该数据库的本地连接。要允许任何其他角色连接或者允许来自远程主机的连接,需要配置Greenplum数据库来允许这类连接。

注意: PgBouncer连接池被与Greenplum数据库捆绑在一起。PgBouncer可以被配置来对通过连接池客户端连接到Greenplum数据库的用户做LDAP或者活动目录认证。

允许到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

下面的表格描述了每个域的含义。

表 1. pg_hba.conf的域
描述
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文件来允许所有主机上的远程客户端使用加密口令认证访问所有数据库。

注意: 对于一个更加安全的系统,考虑从Master的pg_hba.conf中移除所有使用trust认证的连接。信任认证意味着该角色不需要任何认证就可以被授予访问,因此会绕过所有的安保。如果系统有一个ident服务可用,将trust项替换为ident认证。

编辑pg_hba.conf

  1. 在一个文本编辑器中打开文件$MASTER_DATA_DIRECTORY/pg_hba.conf
  2. 对每一类想要允许的连接在该文件中增加一行。该文件中的记录会被顺序读取,因此记录的顺序是有意义的。典型的顺序是,越早出现的记录将具有越严格的连接匹配参数和越弱的认证方法,而越晚出现的记录将具有越宽松的匹配参数和越强的认证方法。例如:
    # 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"
  3. 保存并关闭该文件。
  4. 重新装载pg_hba.conf配置文件来让更改生效:
    $ gpstop -u
注意: 注意也可以通过按管理对象特权中所述设置对象特权来控制数据库访问。pg_hba.conf文件只控制谁能发起一个数据库会话以及如何认证那些连接。
本地环境使用举例:
host all all 10.181.15.0/24 trust
host all all 10.181.12.0/24 md5
其中:
/24代表整个IP段都可访问,/32代表只有当前配置的IP能够访问数据库;
trust代表不加密,表示客户端连接GP数据库时候无需输入密码即可连接;
md5代表加密,表示客户端连接GP数据库时候需要输入对应schema的密码才可以连接。
继续阅读
[基础教程]Mysql单表查询优先级实例讲解 原创推荐

[基础教程]Mysql单表查询优先级实例讲解

这篇文章主要介绍了MySQL单表查询操作,结合实例形式详细分析了mysql单表查询的语法、约束、分组、聚合、过滤、排序等相关原理、操作技巧与注意事项,需要的朋友可以参考下 本文实例讲述了MySQL单表...
[基础教程]Linux系统常用文件管理命令 原创推荐

[基础教程]Linux系统常用文件管理命令

这篇文章主要介绍了linux文件管理命令,结合实例形式分析Linux文件管理的显示、查看、统计等相关操作命令使用技巧,需要的朋友可以参考下 本文实例讲述了linux文件管理命令。分享给大家供大家参考,...