gs_guc

    gs_guc工具由操作系统用户omm执行。

    • “gs_guc-current.log”

      这个文件记录gs_guc产生的日志。

      默认路径:$GAUSSLOG/bin/gs_guc。

    • “gs_guc-年-月-日_HHMMSS.log”

      当“gs_guc-current.log”文件大小满16M后,会根据当前时刻生成一个备份文件。

    • “server.key.cipher”,“server.key.rand”

      使用gs_guc encrypt命令加密用户密码时,如果指定的-M的值为server,则会生成这两个文件。其中“server.key.cipher”存储用户密码的密文,“server.key.rand”存储的是加密因子。

    • “client.key.cipher”,“client.key.rand”

      使用gs_guc encrypt命令加密用户密码时,如果指定的-M的值为client,则会生成这两个文件。其中“client.key.cipher”存储用户密码的密文,“client.key.rand”存储的是加密因子。

    • “datasource.key.cipher”,“datasource.key.rand”

      使用gs_guc encrypt命令加密用户密码时,如果指定的-M的值为source,则会生成这两个文件。其中“datasource.key.cipher”存储用户密码的密文,“datasource.key.rand”存储的是加密因子。

      说明:

      • “datasource.key.cipher”和“datasource.key.rand”是创建Data Source对象时调用的密钥文件。gs_guc生成时即有读权限。使用前需将这两个文件放入各节点目录$GAUSSHOME/bin,且确保具有读权限。gs_ssh工具可以协助您快速将文件放入集群各节点对应目录下。

      • 此外,使用gs_guc generate命令也可以生成这两个文件,可以选择以下两种方式中的任一种,并根据提示输入密码。 方式1:gs_guc encrypt -M source -D ./ 方式2:gs_guc generate -o datasource -D ./

    • 检查配置文件中参数。

    • 修改配置文件中参数。

    • 将已设置的参数值修改为默认值。

      1. gs_guc [ set | reload ] [-N NODE-NAME] [-I INSTANCE-NAME | -D DATADIR] -c "parameter"
    • 修改配置文件中参数,同时发送信号量到postgresql.conf。

      1. gs_guc reload [-N NODE-NAME] [-I INSTANCE-NAME | -D DATADIR] -c parameter=value
    • 修改客户端认证策略。若选择reload会同时发送信号量到pg_hba.conf,即无需重启即可生效。

      1. gs_guc {set | reload} -Z NODE-TYPE [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} -h "HOSTTYPE DATABASE USERNAME IPADDR IPMASK AUTHMEHOD authentication-options"
      2. gs_guc {set | reload} -Z NODE-TYPE [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} -h "HOSTTYPE DATABASE USERNAME IPADDR-WITH-IPMASK AUTHMEHOD authentication-options"
      3. gs_guc {set | reload} -Z NODE-TYPE [-N NODE-NAME] {-I INSTANCE-NAME | -D DATADIR} -h "HOSTTYPE DATABASE USERNAME HOSTNAME AUTHMEHOD authentication-options"

      gs_guc - 图3 说明:

      • AUTHMEHOD后的authentication-options为可选参数,AUTHMEHOD支持以下选项:

        • trust:不验密,禁止远程主机使用trust方式访问数据库。

        • reject:拒绝访问。

        • md5:md5认证,默认不支持(MD5加密算法安全性低,存在安全风险,不建议使用)。

        • sha256:sha256认证(推荐使用)。

        • cert:客户端证书认证。

        • gss:kerberos认证,仅用于内部节点间认证。

        • sm3:sm3认证(国密SM3)。

      • pg_hba.conf中的认证策略越靠前优先级越高,使用gs_guc工具配置时会按一定规则排序将新策略插入到原有认证策略中。配置字段比较顺序为:IPADDR/HOSTNAME > HOSTTYPE > DATABASE > USERNAME,即优先比较IPADDR或HOSTNAME,如果无法区分优先级则继续比较HOSTTYPE,以此类推。对于每个配置字段,通常越严格的配置参数优先级越高、排序越靠前,越宽松的配置参数优先级越低、排序越靠后,具体如下:

        • IPADDR:当配置为全0时表示不限制IP,会放在指定具体某个IP地址的策略后面。

        • DATABASE:当配置为all时表示不限制数据库,会放在指定具体某个数据库的策略后面;当数据库配置为replication时会放在其他策略后面。

        • USERNAME:当配置为all时表示不限制用户,会放在指定具体某个用户的策略后面。

        • HOSTTYPE:local > hostssl > hostnossl > host。

    • 注释已经设置的客户端认证策略。若选择reload会同时发送信号量到pg_hba.conf,即无需重启即可生效。

      1. gs_guc [ set | reload ] [-N NODE-NAME] [-I INSTANCE-NAME | -D DATADIR] -h "HOSTTYPE DATABASE USERNAME IPADDR-WITH-IPMASK AUTHMEHOD"
    • 显示帮助信息。

    • 显示版本号信息。

      1. gs_guc -V | --version
    • gs_guc encrypt生成加密密码和加密因子文件。

        说明:

        • -K是用户指定的密码,gs_guc会对该密码进行长度(8<=len<=16)和密码复杂度要求,如果不满足,将会报错。此密码用于保证生成密码文件的安全性和唯一性,用户无需保存或记忆。

        • -M是加密类型,当前仅支持server、client和source。默认值为server。

      1. gs_guc generate生成其他前缀的加密密码和加密因子文件。

        1. gs_guc generate [-o prefix] [-S cipherkey] -D DATADIR

        gs_guc - 图5 说明:

        • -S是用户指定的密码,密码需要满足长度要求(8<=len<=16)和复杂度要求,如不满足将会报错。当其值为default时,会随机生成一段字符串作为密码,该密码长度为13。如果不带-S参数则会提示交互式输入密码。为了系统安全,推荐使用交互式输入密码方式。

        • 使用gs_guc encrypt或generate命令生成加密密码和加密因子文件时只是参数不同,本质上是一样的。生成过程中会使用随机数作为加密密钥材料和盐值,因此是每次生成的文件都是不同的。每次生成的加密密码和加密因子文件需要成对使用,不能更换或交替使用,加密和解密时需要使用相同的加密密码和加密因子文件。

      • set

        表示只修改配置文件中的参数。

      • check

        表示只检查配置文件中的参数。

      • reload

        表示修改配置文件中的参数,同时发送信号量给数据库进程,使其重新加载配置文件。

      • encrypt/generate

        生成加密密码文件。

      • -N

        需要设置的主机名称。

        取值范围:已有主机名称。

        当参数取值为ALL时,表示设置openGauss中所有的主机。

        说明: 需依赖静态文件,仅在om安装的情况下有效,编译安装由于没有静态文件,所以无效。

      • -I INSTANCE-NAME

        需要设置的实例名称。

        取值范围:已有实例名称。

        当参数取值为ALL时,表示设置主机中所有的实例。

        gs_guc - 图8 说明: 需依赖静态文件,仅在om安装的情况下有效,编译安装由于没有静态文件,所以无效。

      • -D

        需要执行命令的openGauss实例路径。使用encrypt命令时,此参数表示指定的密码文件生成的路径。

        说明:

        • 与“-I” 不能一块使用
      • -c parameter=value

        要设定的openGauss配置参数的名称和参数值。

        gs_guc - 图10 说明:

        • 如果参数是一个字符串变量,则使用-c parameter=”‘value’”或者使用-c “parameter = ‘value’”。

        • 当使用gs_guc set/reload为“log_directory” 恢复默认值时,其默认值会被置为具体的data目录。

        • 当使用gs_guc reload进行参数设定,并指定-N参数时,当指定的节点为主节点时,主备节点的参数值都会被修改;当指定节点为备节点时,只会修改备节点的参数值,不会修改主节点的参数值。

        • 当使用gs_guc reload进行参数设定,未指定-N参数时,当在主节点上执行时,主备节点的参数值都会被修改;当在备节点上执行时,只会修改备节点的参数值,不会修改主节点的参数值。

        取值范围:postgresql.conf中的所有参数。

      • —lcname=LCNAME

        要设定的逻辑数据库名称。

        取值范围:已经创建的逻辑数据库名称。

      • -c parameter

        当进行check操作时,表示需要检查的参数名称;当进行set/reload操作时,参数值不允许为空,为空时不会恢复为数据库参数的默认值。

      • -h host-auth-policy

        指定需要在“pg_hba.conf”增加的客户端认证策略。

        取值范围:

        • HOSTTYPE DATABASE USERNAME IPADDR IPMASK [authmehod-options]
        • HOSTTYPE DATABASE USERNAME IPADDR-WITH-IPMASK [authmehod-options ]
        • HOSTTYPE DATABASE USERNAME HOSTNAME [authmehod-options ]

        HOSTTYPE是必选参数,取值:

        • local
        • host
        • hostssl
        • hostnossl

        其中“local”是一个Unix域套接字,“host”是普通或SSL加密的TCP / IP套接字,“hostssl”是SSL加密的TCP / IP套接字,“hostnossl”是一个纯TCP / IP套接字。

        authmehod-options是可选输入,取值:

        • reject
        • md5
        • sha256
        • sm3
        • cert
        • gss

        详细的参数说明请参见“pg_hba.conf”配置文件中的描述。

        说明: 指定-h的情况下,默认会尝试修改所有节点的pg_hba文件,但是如果是编译安装,由于没有静态文件,可以成功修改本节点的pg_hba文件,但是会提示静态文件不存在。

      • -?, —help

        显示帮助信息。

      • -V, —version

        显示版本信息。

      • -M, —keymode=MODE

        设定该密码在数据库运行过程中,用于服务端(server)、客户端(client)还是创建Data Source对象时调用。

        gs_guc - 图13 说明: 在使用ssl功能时,会涉及到服务端证书和私钥文件的加密密码和客户端证书和私钥文件的加密密码,在加密存储加密密码时,需要指定模式,否则默认是生成服务端的密码文件。

        取值范围:

        • server(缺省)
        • client
        • source
      • -K PASSWORD

        指定需要加密的密码。

        取值范围:字符串,符合密码复杂度的要求。

      • -U, —keyuser=USER

        指定要加密的用户,隶属于OS用户。

        说明: openGauss可以为每个用户配置不同的ssl证书和私钥文件,指定该选项,可以生成按用户名区分的密码文件。

      • -S CIPHERKEY

        指定需要加密的字符串。

        取值范围:字符串。

      • -o PREFIX

        指定需要输出的OBS类型的cipher和rand文件前缀名称字符串,默认输出文件名前缀为obsserver。

        取值范围:仅支持数字、字母和下划线。

      • -Z NODE-TYPE

        指定数据库实例节点类型,参数默认值为datanode。NODE-TYPE用于识别配置文件。

        取值范围:datanode。

        gs_guc - 图15 说明: 数据库实例节点类型有coordinator、datanode、cmserver、cmagent和gtm。openGauss只能取值为datanode,当NODE-TYPE为datanode时,对应数据库的数据目录中的配置文件postgresql.conf。

      示例1:修改数据库允许的最大连接数为800。修改后需要重启数据库才能生效。

      1. gs_guc set -D /gaussdb/data/dbnode -c "max_connections = 800" -N plat1
      2. Total instances: 1. Failed instances: 0.
      3. Success to perform gs_guc!

      示例2:将已设置的数据库允许的最大连接数值修改为默认值。修改后需要重启数据库才能生效。

      1. gs_guc set -D /gaussdb/data/dbnode -c "max_connections" -N plat1
      2. Total instances: 1. Failed instances: 0.
      3. Success to perform gs_guc!

      示例3:设置客户端认证策略。

      示例4:注释清理已经设置的客户端认证策略。

      1. gs_guc set -N all -I all -h "host replication testuser 10.252.95.191/32"
      2. Total instances: 2. Failed instances: 0.
      3. Success to perform gs_guc!

      示例5:加密服务器端存储用户密码的明文,避免密码泄露。

      1. gs_guc encrypt -K ***

      示例6:检查openGauss中各个实例的参数配置情况。

      1. gs_guc check -D /gaussdb/data/dbnode -c "max_connections" -N plat1
      2. Total GUC values: 1. Failed GUC values: 0.
      3. The value of parameter max_connections is same on all instances.
      4. max_connections=800

      示例7:修改archive_command归档命令,由用户自己保证归档路径的有效性。修改后需要重启数据库才能生效。推荐使用此方法。

      1. gs_guc set -N all -D /data/datanode -c "archive_command= 'cp %p /data/datanode/pg_xlog/archive_status/%f'"
      2. Total instances: 3. Failed instances: 0.
      3. Success to perform gs_guc!

      示例8:通过用户输入的明文密码,生自定义的test.key.cipher和test.key.rand文件。

      1. gs_guc generate -S Mppdb@123 -D data/xzg/wisequery/gaussdb -o test