1. gs_guc 介绍
gs_guc是GaussDB用于调整postgresql.conf和pg_hba.conf配置文件中参数值的工具(仅仅调整参数,会不会自动加载生效?)。gs_guc也是GaussDB提供的一种用户密码加密工具,可以加密存储用户的明文密码,避免密码泄露。
GaussDB的配置文件(postgresql.conf)中的参数默认值都是单机的配置模式,可以根据自己的应用调整参数的默认值,包括监听地址和端口,性能调整参数以及双机调整参数等。配置文件pg_hba.conf中的参数默认值都是默认的主机认证设置,可以根据自己的应用调整参数的默认值,包括通过Unix套接字连接,通过TCP/IP进行连接等。
gs_guc -c或-D修改postgresql.conf配置参数后,同步到配置文件中,并且发送信号通知gaussmaster参数内容发生了改变。使用-A参数修改pg_hba.conf配置后,需要重启数据库才能生效(或 gs_ctl reload)
注意区别:gs_ctl reload模式简单地给gaussdb进程发送一个SIGHUP信号,导致它重新读取配置文件( postgresql.conf, pg_hba.conf ),这样就允许修改部分配置文件选项而不用重启系统即可生效。
2. 用法
语法 1
- 使用-c parameter="‘value’“设置postgresql.conf参数值时,如果参数是一个字符串变量,则使用-c parameter=”‘value’"。如果value中含有特殊字符(如$),请转义后使用。
- 使用-A hba_parameter="value"设置pg_hba.conf参数值时,由于value中有空格,需用双引号引起来,但里面不能再用单引号。请注意参数值格式的差异。
- 不要在GaussDB启动过程中使用gs_guc reload命令修改配置参数,GaussDB启动成功后执行修改。
- -K 和-k 选项功能相同,都是用于加密用户指定的明文密码,生成密码文件,防止密码泄露。不同之处在于,-K后面必须跟明文密码,不支持其它方式输入密码;用户使用-k参数时,gs_guc工具会从标准输入中读取明文密码,进行加密。
test@suse11-64:~> gs_guc encrypt -k
password:
gs_guc encrypt -k ***test@suse11-64:~> echo gaussdb@123|gs_guc encrypt -k
password:
gs_guc encrypt -k *** test@suse11-64:~> gs_guc encrypt -k <<password
> gaussdb@123
> password
password:
gs_guc encrypt -k ***
- gs_guc会要加密的明文密码进行长度(8<=len<=1024)和密码复杂度检查,如果不满足,将会报错。其中密码复杂度要求如下:至少包含大写字母(A-Z),小写字母(a-z),数字(0-9),非字母数字字符四类字符中的三类字符;最少8个字符。
参数说明
参数 | 参数说明 | 取值范围 |
set | 指定操作功能。表示设置指定的配置参数。 | – |
reload | 用于加载配置文件。只有数据库维护者或者仲裁软件调用gs_guc修改配置文件。 | – |
-c parameter=value | 要设定的GaussDB配置参数的名称。 | parameter的取值为postgresq.conf中的所有参数。 |
-A hba_parameter=value | 要设定的GaussDB pg_hba.conf配置参数的名称。 | hba_parameter为local,ipv4,ipv6,replication中的一种,value值为需要设置的一整行配置项。 |
-D,–pgdata=DATADIR | 指定GaussDB数据文件的路径。 | DATADIR必须使用正确的GaussDB数据文件的路径。 默认值:环境变量GAUSSDATA。 |
-K password | 指定需要加密的明文密码。 | 符合密码复杂度的要求。 |
-M keymode | 设定该密码在数据库运行过程中,用于服务端(server)还是客户端(client)。 说明: 在使用ssl功能时,会涉及到服务端证书和私钥文件的加密密码和客户端证书和私钥文件的加密密码,在加密存储加密密码时,需要指定模式,否则默认是生成服务端的密码文件。 |
server(缺省) client |
-k | 指定该参数时,gs_guc工具会从标准输入中读取要加密的明文密码。 | 符合密码复杂度的要求。 |
-U username | 指定要加密的明文密码隶属于哪个OS用户。 说明: 比如,GaussDB可以为每个用户配置不同的ssl证书和私钥文件,指定该选项,可以生成按用户名区分的密码文件。 |
– |
–help | 显示帮助信息然后退出。 | – |
–version | 显示版本信息然后退出。 | – |
文件说明
gs_guc-current.log
这个文件记录gs_guc产生的日志。该文件的位置可能有两个,当配置文件中log_directory指定的路径对系统管理员有效时,日志记录到log_directory所指的路径下;当配置文件中log_directory指定的路径对系统管理员无效时,日志记录到$GAUSSHOME/bin目录下。
gs_guc – 年 – 月 – 日_HHMMSS.log
这个文件是当gs_guc-current.log文件大小满16M后,根据当前时刻,对gs_guc-current.log重命名生成的文件。
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存储的是加密因子。
说明:
client.key.cipher和client.key.rand是不指定-U选项时生成的密文文件和加密因子文件。如果通过-U指定了用户名,则会生成以用户名开头的文件。以指定-U test为例,生成的文件名为:test.key.cipher、test.key.rand。
3. 示例
通过gs_guc set命令设置pg_hba.conf文件中增加一行。(-A选项 指定仅设置参数不加载)
gs_guc set -A ipv4="host all all 10.2.3.5/8 sha256"
通过gs_guc reload命令设置参数log_connections。(设置并加载生效)
gs_guc reload -c log_connections=yes
通过gs_guc set命令设置参数log_connections。(仅设置参数)
gs_guc set -c log_connections=yes