VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

配置客户端接入认证

功能描述

如果主机需要远程连接数据库,必须在数据库系统的配置文件中增加此主机的信息,并且进行客户端接入认证。配置文件(默认名称为pg_hba.conf)存放在数据库的数据目录里。hba(host-based authentication)表示是基于主机的认证。

  • 本产品支持如下三种认证方式,这三种方式都需要配置“pg_hba.conf”文件。

    • 基于主机的认证:服务器端根据客户端的IP地址、用户名及要访问的数据库来查看配置文件从而判断用户是否通过认证。
    • 口令认证:包括远程连接的加密口令认证和本地连接的非加密口令认证。
    • SSL加密:使用OpenSSL(开源安全通信库)提供服务器端和客户端安全连接的环境。
  • “pg_hba.conf”文件的格式是一行写一条信息,表示一个认证规则,空白和以#开头(即被注释)的行被忽略。

  • 每个认证规则是由若干空格和/,空格和制表符分隔的字段组成。如果字段用引号包围,则它可以包含空白。一条记录不能跨行存在。

配置文件参考

参数名称 描述 取值范围
local 表示这条记录只接受通过Unix域套接字进行的连接。没有这种类型的记录,就不允许Unix域套接字的连接。只有在从服务器本机使用vsql连接且在不指定-U参数的情况下,才是通过Unix域套接字连接。 -
host 表示这条记录既接受一个普通的TCP/IP套接字连接,也接受一个经过SSL加密的TCP/IP套接字连接。 链接地址
hostssl 表示这条记录只接受一个经过SSL加密的TCP/IP套接字连接。 用SSL进行安全的连接,需要配置申请数字证书并配置相关参数,详细信息请参见身份认证与通信加密
hostnossl 表示这条记录只接受一个普通的TCP/IP套接字连接。 -
DATABASEGUC 声明记录所匹配且允许访问的数据库。
  • all:表示该记录匹配所有数据库。
  • sameuser:表示如果请求访问的数据库和请求的用户同名,则匹配。
  • samerole:表示请求的用户必须是与数据库同名角色中的成员。
  • samegroup:与samerole作用完全一致,表示请求的用户必须是与数据库同名角色中的成员。
  • 一个包含数据库名的文件或者文件中的数据库列表:文件可以通过在文件名前面加前缀@来声明。文件中的数据库列表以逗号或者换行符分隔。
  • 特定的数据库名称或者用逗号分隔的数据库列表。
  • 说明:
    值replication表示如果请求一个复制链接,则匹配,但复制链接不表示任何特定的数据库。如需使用名为replication的数据库,需在database列使用记录“replication”作为数据库名。
    USER 声明记录所匹配且允许访问的数据库用户。
  • all:表明该记录匹配所有用户。
  • +用户角色:表示匹配任何直接或者间接属于这个角色的成员。
  • 说明:
    +表示前缀符号。
  • 一个包含用户名的文件或者文件中的用户列表:文件可以通过在文件名前面加前缀@来声明。文件中的用户列表以逗号或者换行符分隔。
  • 特定的数据库用户名或者用逗号分隔的用户列表。
  • ADDRESS 指定与记录匹配且允许访问的IP地址范围。 支持IPv4和IPv6,可以使用如下两种形式来表示:
    IP地址/掩码长度。例如,10.10.0.0/24
    IP地址子网掩码。例如,10.10.0.0 255.255.255.0
    说明:
    以IPv4格式给出的IP地址会匹配那些拥有对应地址的IPv6连接,比如127.0.0.1将匹配IPv6地址 ::ffff:127.0.0.1
    METHOD 声明连接时使用的认证方法。 本产品支持如下几种认证方式,详细解释请参见下表认证方式
  • trust
  • reject
  • md5(不推荐使用,默认不支持,可通过password_encryption_type参数配置
  • sha256
  • cert
  • gss(仅用于Vastbase内部节点间认证)
  • sm3
  • 认证方式

    认证方式 说明
    trust 采用这种认证模式时,本产品只完全信任从服务器本机使用vsql且不指定-U参数的连接,此时不需要口令。trust认证对于单用户工作站的本地连接是非常合适和方便的,通常不适用于多用户环境。如果想使用这种认证方法,可利用文件系统权限限制对服务器的Unix域套接字文件的访问。要使用这种限制有两个方法:
  • 设置参数unix_socket_permissionsunix_socket_group
  • 设置参数unix_socket_directory,将Unix域套接字文件放在一个经过恰当限制的目录里。
  • 须知:
    设置文件系统权限只能Unix域套接字连接,它不会限制本地TCP/IP连接。为保证本地TCP/IP安全,Vastbase不允许远程连接使用trust认证方法。
    reject 无条件地拒绝连接。常用于过滤某些主机。
    md5 要求客户端提供一个md5加密的口令进行认证。
    须知:
    不推荐使用md5认证,因为md5为不安全的加密算法,存在网络安全风险。Vastbase保留md5认证和密码存储,是为了便于第三方工具的使用(比如TPCC评测工具)。
    sha256 要求客户端提供一个sha256算法加密的口令进行认证,该口令在传送过程中结合salt(服务器发送给客户端的随机数)的单向sha256加密,增强了安全性。
    cert 客户端证书认证模式,此模式需进行SSL连接配置且需要客户端提供有效的SSL证书,不需要提供用户密码。
    须知:
    该认证方式只支持hostssl类型的规则。
    gss 使用基于gssapi的kerberos认证。
    须知:
    该认证方式依赖kerberos server等组件,仅支持Vastbase内部通信认证。当前版本暂不支持外部客户端通过kerberos认证连接。
    开启Vastbase内部kerberos认证会使增加内部节点建连时间,即影响首次涉及内部建连的SQL操作性能,内部连接建立好后, 后续操作不受影响。
    sm3 国密SM3算法,目前只支持vsql、JDBC、ODBC三种连接方式

    操作步骤

    1、以操作系统用户vastbase登录数据库主节点。

    2、在数据库主节点实例对应的“pg_hba.conf”文件中添加规则,配置客户端认证方式,允许客户端以“jack”用户连接到本机,此处远程连接禁止使用“vastbase”用户(即数据库初始化用户)。

    例如,下面示例中,配置允许IP地址为10.10.0.30的客户端访问本机。

    vi $PGDATA/pg_hba.conf
    host all jack 10.10.0.30/32 md5;
    

    也可使用如下命令配置

    vb_guc reload -D $PGDATA -h "host all jack 10.10.0.30/32 md5"
    

    使用jack用户前,需先本地连接数据库,并在数据库中使用如下语句创建jack用户:

    CREATE USER jack PASSWORD 'Test@123';
    
    • jack表示连接数据库的用户。

    • 10.10.0.30/32表示只允许IP地址为10.10.0.30的主机连接。此处的IP地址不能为Vastbase内的IP,在使用过程中,请根据用户的网络进行配置修改。32表示子网掩码为1的位数,即255.255.255.255

    • md5表示连接时jack用户的密码使用md5算法加密。

    “pg_hba.conf”文件中的每条记录可以是下面四种格式之一,四种格式的参数说明请参见配置文件参考

    local   DATABASE USER METHOD [OPTIONS] 
    host    DATABASE USER ADDRESS METHOD [OPTIONS] 
    hostssl  DATABASE USER ADDRESS METHOD [OPTIONS] 
    hostnossl DATABASE USER ADDRESS METHOD [OPTIONS]
    

    因为认证时系统是为每个连接请求顺序检查“pg_hba.conf”里的记录的,所以这些记录的顺序是非常关键的。

    3、可配置“时间段”字段:

    (1)表示一段时间范围,例如”[2019-10-01 09:30:28, 2020-10-01 23:59:59)“,其中 [] 表示闭区间,() 表示开区间。区间中的每个元素要求是合法的timestamptz类型,可以通过逗号分隔的方式指定多个时间段。

    (2)兼容旧的配置方式,意味着在没有配置时间段时,表示允许任意时刻连接。

    (3)[2020-8-14, ) 表示从2020-8-14且包含2020-8-14到永久; [2020-8-14, ] 与其含义一致。

    (4) [ , ] 、( , ) 、( , ] 、[ , ) 含义都表示任意时刻。

    (5)访问控制只针对登录那一瞬间,因此连接成功后,超出这个时间不会被断开。

    示例如下:

    允许192.168.1.111客户端通过Unix domain方式在2020-10-01至2021-11-01和20210101至20210501时间段登录 。

    local  all  all  192.168.1.111  "[2020-10-01, 2021-11-01]","[20210101,20210501]"  md5
    

    在配置“pg_hba.conf”文件时,请依据通讯需求按照格式内容从上至下配置记录,优先级高的需求需要配置在前面。Vastbase和扩容配置的IP优先级最高,用户手动配置的IP请放在这二者之后,如果已经进行的客户配置和扩容节点的IP在同一网段,请在扩容前删除,扩容成功后再进行配置。

    因此对于认证规则的配置建议如下:

    • 靠前的记录有比较严格的连接参数和比较弱的认证方法。
    • 靠后的记录有比较宽松的连接参数和比较强的认证方法。
    • 一个用户要想成功连接到特定的数据库,不仅需要通过pg_hba.conf中的规则检查,还必须要有该数据库上的CONNECT权限。如果希望控制某些用户只能连接到指定数据库,赋予/撤销CONNECT权限通常比在pg_hba.conf中设置规则更为简单。
    • 对应Vastbase外部客户端连接,trust为不安全的认证方式,请将认证方式设置为sha256。

    异常处理

    用户认证失败有很多原因,通过服务器返回给客户端的提示信息,可以看到用户认证失败的原因。常见的错误提示请参见下表。

    错误提示

    问题现象 解决方法
    用户名或密码错误:FATAL: invalid username/password,login denied 这条信息说明用户名或者密码错误,请检查输入是否有误。
    连接的数据库不存在:FATAL: database “TESTDB” does not exist 这条信息说明尝试连接的数据库不存在,请检查连接的数据库名输入是否有误。
    未找到客户端匹配记录:FATAL: no pg_hba.conf entry for host “10.10.0.60”, user “ANDYM”, database “TESTDB” 这条信息说明已经连接了服务器,但服务器拒绝了连接请求,因为没有在它的pg_hba.conf配置文件里找到匹配的记录。请联系数据库管理员在pg_hba.conf配置文件加入用户的信息。
    未找到客户端匹配记录:failed to connect 10.10.0.1:12000. 这条信息说明无法连接到指定IP和端口的服务器,请联系数据库管理员检查pg_hba.conf配置文件里是否有配置对应IP白名单。

    示例

    TYPE  DATABASE     USER       ADDRESS         METHOD 
    "local" is for Unix domain socket connections only 
    #表示只允许以安装时-U参数指定的用户从服务器本机进行连接。 
    local  all       all                   trust 
    IPv4 local connections: 
    #表示允许vastbase用户从10.10.0.50主机上连接到任意数据库,使用sha256算法对密码进行加密。 
    host   all      vastbase       10.10.0.50/32       sha256 
    #表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用sha256算法对密码进行加密,并且经过SSL加密传输。 
    hostssl   all       all       10.10.0.0/24       sha256 
    #表示允许任何用户从10.10.0.0/24网段的主机上连接到任意数据库,使用Kerberos认证方式,当前版本暂不支持客户端kerberos认证。 
    host   all       all       10.10.0.0/24       gss     include_realm=1     krb_realm=HADOOP.COM
    #表示禁止任何用户从10.10.0.1/32网段的主机上连接到任意数据库。 
    host    all             all             10.10.0.1/32            reject