VastbaseG100

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

Menu

HAS配置文件密码加密

功能描述

启动has服务之前,需要在 HAS 的 YAML 配置文件中编辑 authentication 信息,通常包括 superuser 和 replicatioin 的用户名、密码。但将密码明文暴露在配置文件中是不安全的。为了解决这一问题,Vastbase引入了has_encryption工具对配置文件中的密码进行加密。

has_encryption使用HMAC算法对用户输入的明文密码进行计算并输出密文,数据库管理员获取后可以将其填写在 YAML 文件中对应的密码处,使显示在 YAML 文件中的密码为密文。

注意事项

  • has_encryption工具仅在HAS V1.2 Build 37 及之后的版本中支持。

  • 请在安装数据库的操作系统用户下使用has_encryption工具。

使用流程

1、可执行文件has_encryption位于安装包HAS_VastbaseG100_${平台}_V1.2_${datetime}.zip内,切换到解压后该文件所在的目录下,为可执行文件授权:

su - root  #切换到root用户
cd /data/soft/    #切换至文件所在目录,此处以/data/soft为例
chmod +x has_encryption  #授予可执行权限
chown vastbase:vastbase has_encryption #设置文件的所属者/用户组

2、切换至数据库用户,此处以vastbase用户为例:

su - vastbase

3、执行has_encryption工具,根据操作需求选择以下方式。

方式一:非交互式

执行has_encryption命令的同时指定明文密码,has_encryption工具将生成一个随机数并保存至 ~/.rand 文件中,对随机数进行HMAC计算后的密文保存在 ~/.cipher 文件中。

./has_encryption --password=Admin@123

上述命令生成的文件保存在当前登录用户的用户主文件夹下。重复执行has_encryption命令生成的新文件将覆盖掉旧文件。(注意解密过程需要用到相应 rand 文件。)

上述命令的执行效果如下:

方式二:交互式

通过此方式进行加密时,支持自定义 rand 文件的位置。

1、执行has_encryption命令。

./has_encryption

2、选择是否生成新的 rand 文件,并指定rand文件的保存位置。

  • 如果选择“是”,则应输入 rand 文件的保存路径;按<Enter>键将保存 rand 文件至默认位置,即当前登录用户的用户主文件夹下 (~/.rand)。如图所示:

    保存位置可能已经存在同名文件,此时应选择是否对其进行覆盖(重写),选择是,则会将旧的文件覆盖,如果选择否,则需要重新指定一个保存位置。

  • 如果选择“否”,则表示使用旧的 rand 文件进行加密,此时需要用户指定 rand 文件的位置。按<Enter>键表示在默认位置 (~/.rand)读取rand文件。如图所示:

  • 如果输入的路径包含空格,则会提示路径不合法,需要重新输入合法路径。
  • .rand 文件中保存的是二进制格式的随机数。一个 rand 文件对应一个计算后的密文。

3、输入密码:

输入的密码应为加密前的明文密码,第二次输入的密码需与前一次输入的内容完全相同。完成后,即可在屏幕上获取输出的密文。如图所示:

使用.rand文件中保存的随机数计算后得到的密文保存在 ~/.cipher 文件中。

4、得到密文,回填密码,并在 YAML 文件中配置 rand_file_path。

rand_file_path 表示 rand 文件的位置。该字段应配置在 superuser 和 replication 下,分别指定两个密码对应的 rand 文件位置。如不配置此字段,表示从默认位置(~/.rand)读取 rand 文件。

解密流程

对密文进行解密时,需要用到此前生成的 rand 文件。

在 HAS 服务需要用到密码时,会先读取 rand 文件,生成用于解密的密钥。因此 HAS 服务需要根据 YAML 文件中配置的 superuser 以及 replication 的 rand_file_path 字段来获取 rand 文件的位置。如果未配置此字段,那么 HAS 服务在使用时会从默认路径(~/.rand)读取文件。

读取 rand 文件之后,需要从 YAML 文件中读取密码的密文,进行解密。注意,使用的密码必须和 rand 文件对应,否则会导致解密失败,HAS 服务无法正常运行。