ITPub博客

首页 > 数据库 > > 配置客户端接入认证-配置用户白名单

配置客户端接入认证-配置用户白名单

作者:GaussDB_数据库 时间:2020-01-07 09:52:21 0 删除 编辑

背景信息

用户可通过SQL语句或者使用gs_gucZenith工具向zhba.conf中添加有效用户白名单条目,也可以使用gs_gucZenith工具从zhba.conf中删除不再使用的用户白名单条目,以限制指定用户只能从限定的IP访问数据库。如果zhba.conf内容为空,表示任意用户从任意IP均可访问数据库。

zhba.conf文件最大存储空间为64KB。各hba条目间无关联关系,声明顺序不影响功能。hba条目的格式为'type user address',参数说明请参考表1。

表1 hba条目参数

参数

描述

备注

type

建立连接的类型。可配置为host或者hostssl。

host是指普通TCP或SSL连接。hostssl是指SSL连接,如果服务端开启SSL,但是客户端没有配置ssl,此时服务端会拒绝连接,如果需要使用hostssl配置请参见用SSL进行安全的TCP/IP连接。

user

允许访问数据库的指定用户。

如果user是“*”或者“*”单独出现表示所有用户。

如果user中包含特殊字符(例如#、*、TAB键等特殊字符)需要写成“user”格式。例如:host "#abc" 127.0.0.1、host "abc" 127.0.0.1 表示将双引号中的字符串整体作为user。

单行只能指定一个用户。

address

允许访问数据库的指定用户的IP地址范围。可以英文逗号分隔声明多个。

IP地址支持IPV4、IPV6地址、或指定子网掩码长度表示一个子网网段。如下均为合法格式:
  • 192.168.3.222 表示一个IPV4主机。
  • 192.168.3.0/24 表示一个IPV4子网网段192.168.3.0所有IP。
  • 20AB::9217:acff:feab:fcd0 表示一个IPV6主机。
  • 20AB::9217:acff:feab:fcd0/64 表示前缀为64的IPV6网段。
集群安装成功后,zhba.conf文件中默认有如下配置:
host * 127.0.0.1,::1
host * ip1
host * ip2
  • 数据库安装时,在zhba.conf添加默认记录 host * 127.0.0.1,::1,其中127.0.0.1为IPV4的回环地址,::1为IPV6的回环地址,均表示只允许本地登入。
  • ip1和ip2是集群所有服务器的IP地址。

配置用户白名单时,请不要删除上面的host * 127.0.0.1,::1配置,否则配置生效后会导致:

  • SYS用户无法使用“zsql / as clsmgr”本地登录CN。
  • 所配置实例的状态为UNSTABLE,并且未配置回环地址的用户将无法使用回环地址本地登录数据库集群,报错如下:
    [omm@plat cfg]\>zsql omm@127...1:8000
    Please enter password:
    ***********
    GS-00331, Whitelist rejects connection for user "OMM", ip "127.0.0.1", current date "2019-03-15 16:13:46.888", please check zhba.conf or tcp valid node configuration
    SQL>

用户误删后,将host * 127.0.0.1,::1配置到zhba.conf文件中并重新在线加载zhba.conf文件后,即可恢复正常。

操作步骤

  1. 以omm用户身份登录待配置接入认证的GaussDB 100服务器。

    • 在单机/主备部署模式下,DN直接对外提供服务,用户需要对所有DN配置客户端接入认证。
    • 在分布式部署模式下,多组DN通过CN共同对外提供服务,只允许通过配置了接入认证的CN远程访问数据库。用户可以根据实际需要确定允许远程访问的CN个数以及每个CN上允许或禁止的远程访问的用户和IP。

  1. 在线向zhba.conf中增加实例的用户白名单条目。

    支持以下两种方法:

    • 方法一:使用gs_gucZenith工具添加,立即生效。

      在分布式部署模式下,只支持为CN增加白名单信息,不支持为DN增加白名单信息。使用如下命令:

      gs_gucZenith -S 'host user address'

      其中“type、user、address”的详细介绍请参考表1。例如:

      gs_gucZenith -S 'host * 10.xx.xx.1'

      如果为指定实例增加白名单信息,使用如下命令:

      gs_gucZenith -S 'host * 10.xx.xx.1' -I cn_402
      • 不支持使用gs_gucZenith工具增加集群内部节点IP。
      • 在无CN模式下,为DN增加白名单。
    • 方法二:通过SQL语句添加,需要添加后通过执行“ALTER SYSTEM RELOAD HBA CONFIG;”语句在线加载用户白名单使修改生效。

      该操作仅对当前实例有效,需要在待配置用户白名单的实例上分别进行设置。

      zsql user@ip:port -c "ALTER SYSTEM ADD HBA ENTRY 'type user address';"

      其中“type、user、address”的详细介绍请参考表1。例如:

      zsql user@ip:port -c "ALTER SYSTEM ADD HBA ENTRY 'host user2 192.168.3.222,192.168.3.225,192.168.8.0/24';"

      • sql语句在线添加hba条目时,语法中建议使用单引号或者括号。
      • 执行sql语句添加hba条目时,空格不能使用Tab键输入,否则,在线加载用户白名单时会报错“GS-00220, Hba line(20) format is not correct”。

  2. 在线删除实例的某些用户白名单条目。
    zsql user@ip:port -c "ALTER SYSTEM DELETE HBA ENTRY 'host user2 192.168.3.222,192.168.3.225,192.168.8.0/24';"
    仅支持使用gs_gucZenith工具删除,立即生效。

    如果为所有实例增加白名单信息,使用如下命令:

    gs_gucZenith -R 'host * 10.xx.xx.10'
    如果为指定实例增加白名单信息,使用如下命令:
    gs_gucZenith -R 'host * 10.xx.xx.10' -I cn_401
    如果要删除的白名单信息不存在,执行命令的回显中会显示如下类似内容:
    Warning: Entry 'host omm 10.xx.xx.10' not found for instance cn_401. Skip to remove this config.

    不支持使用gs_gucZenith工具删除集群内部节点IP和127.0.0.1。

  1. (可选)通过查询视图DV_HBA确认待配置实例上用户白名单是否配置成功。
    zsql user@ip:port -c "SELECT * FROM SYS.DV_HBA";
    示例
  • 分布式部署模式下,使用gs_gucZenith工具添加用户白名单,立即生效。
    [@plat1 script]\>gs_gucZenith -S 'host * 10.0.0.1'
    Get cluster status.
    Start getting healthy zenith instances.
    Successfully got healthy zenith instances.
    Start config user whitelist.
    ------------------------------
    Set User whitelist successfully! Instance: cn_401
    ------------------------------
    Set User whitelist successfully! Instance: cn_402
    End config user whitelist.
  • 分布式部署模式下,使用gs_gucZenith工具从所有CN的用户白名单配置中删除信息,立即生效。
    [@plat1 script]\>gs_gucZenith -R 'host * 10.0.0.1'
    Get cluster status.
    Start getting healthy zenith instances.
    Successfully got healthy zenith instances.
    Start config user whitelist.
    ------------------------------
    Remove User whitelist successfully! Instance: cn_401
    ------------------------------
    Remove User whitelist successfully! Instance: cn_402
    ------------------------------
    End config user whitelist.
  • 分布式部署模式下,使用gs_gucZenith工具从所有CN的用户白名单配置中删除信息,立即生效。
    [@plat1 script]\>gs_gucZenith -R 'host * 10.0.0.1'
    Get cluster status.
    Start getting healthy zenith instances.
    Successfully got healthy zenith instances.
    Start config user whitelist.
    ------------------------------
    Remove User whitelist successfully! Instance: cn_401
    ------------------------------
    Remove User whitelist successfully! Instance: cn_402
    ------------------------------
    End config user whitelist.
  • 分布式部署模式下,使用gs_gucZenith工具添加用户白名单,立即生效。
    [@plat1 script]\>gs_gucZenith -S 'host * 10.0.0.1'
    Get cluster status.
    Start getting healthy zenith instances.
    Successfully got healthy zenith instances.
    Start config user whitelist.
    ------------------------------
    Set User whitelist successfully! Instance: cn_401
    ------------------------------
    Set User whitelist successfully! Instance: cn_402
    End config user whitelist.
     

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69959250/viewspace-3145762/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: SQL参考-常量与宏
下一篇: 系统视图-PG_USER
请登录后发表评论 登录
全部评论

注册时间:2020-01-06

  • 博文量
    2907
  • 访问量
    19182