Files
oceanbase/docs/docs-cn/6.administrator-guide/3.basic-database-management/2.zone-management/3.add-or-delete-an-encrypted-zone.md
2022-02-10 14:51:49 +08:00

4.4 KiB

增加或删除加密 Zone

OceanBase 数据库提供了 Zone 级别的日志传输和保存加密功能,您可以在集群中添加 Zone 时,指定 Zone 的加密属性,后续在向该加密 Zone 发送日志时,系统会对 Clog 进行加密,并且该 Zone 在持久化 Clog 时也会加密。

添加加密 Zone

本节以下述集群为例,提供加密 Zone 的添加方法。

假设集群中已有 2个 Zone: z1z2,需要添加一个Zone z3。其中,z1z2 是常规读写 Zone,z3 是加密 Zone,z3 只包含加密的事务日志数据。

添加加密 Zone 的步骤如下:

  1. 使用 root 用户登录数据库的 sys 租户。

  2. 依次执行以下语句,生成主密钥。

    obclient> ALTER SYSTEM set tde_method = 'internal';
    
    obclient>ALTER INSTANCE ROTATE INNODB MASTER KEY;
    
  3. 执行以下语句,检查上一步中生成的主密钥是否生效。

    obclient> SELECT min(max_active_version) FROM oceanbase.__all_virtual_master_key_version_info WHERE tenant_id = 1;
    

    当查询结果中 min(max_active_version) 大于 0 时,则表示主密钥已生效,否则主密钥没有生效。

    虚拟表 __all_virtual_master_key_version_info 用于记录每个 OBServer 上主密钥的版本信息,其表结构如下:

    table_name    = '__all_virtual_master_key_version_info',
    
    rowkey_columns = [
      ('svr_ip', 'varchar:MAX_IP_ADDR_LENGTH'),
      ('svr_port', 'int'),
      ('tenant_id', 'int'),
    ],
    normal_columns = [
      ('max_active_version', 'int'),
      ('max_stored_version', 'int'),
      ('expect_version', 'int'),
    ]
    

    每个 OBServer 上的每一个租户的主密钥信息占据该虚拟表中的一行。其中:

    • expect_version 表示集群中该租户当前已生成的主密钥的最大版本。

    • max_stored_version 表示对应 OBServer 在其本地持久化中,该租户的主密钥的最大版本。

    • max_active_version 表示对应 OBServer 在进行加密时,该租户可以使用的主密钥的最大版本,max_active_version 等于 0 表示没有已经生效的主密钥。

  4. 执行以下命令,添加加密 Zone。

    注意

    在添加加密 Zone 前,系统租户必须要有一个已生效的主密钥,如果系统租户没有一个生效的主密钥,则执行添加加密 zone 的语句会失败。

    obclient> ALTER SYSTEM ADD Zone 'z3' zone_type = 'encryption';
    
  5. 分别执行以下命令,调整系统租户的 Locality。

    由于集群之前为 2 副本,为保证系统租户的高可用,在添加完加密 Zone 后,需要将系统租户补充为 3 副本。

    obclient> CREATE RESOURCE POOL sys_pool2 unit_num = 1, resource_pool_list=('z3'), unit='sys_unit_config';
    
    obclient> ALTER TENANT sys resource_pool_list = ('sys_pool','sys_pool2');
    
    obclient> ALTER TENANT sys LOCALITY = 'F@z1,F@z2,E@z3';
    

轮转主密钥

当用户希望更换主密钥时,管理员可以为加密 Zone 轮转主密钥。

  1. 使用 root 用户登录数据库的 sys 租户。

  2. 执行以下语句,为加密 Zone 轮转主密钥。

obclient> ALTER INSTANCE ROTATE INNODB MASTER KEY;

说明

在轮转主密钥时,如果出现了 OBServer 宕机,加密 Zone 上的 OBServer 宕机不会对主密钥生效产生影响,但常规 Zone 上的 OBServer 宕机对主密钥的生效可能产生影响,可能会导致轮转生成的新主密钥不能立即生效。

删除加密 Zone

加密 Zone 添加成功后,如果需要删除加密 Zone,其操作与常规读写 Zone 的删除操作相同,您可以使用以下语句删除该加密 Zone:

obclient> ALTER SYSTEM DELETE ZONE 'z3';

加密 Zone 使用限制

加密 Zone 和加密投票型副本的使用有一定限制,具体限制如下:

  • 加密 Zone 上仅支持部署加密投票型副本,不支持部署其他类型的副本,例如全功能副本、只读副本、普通日志副本等均不能部署在加密 Zone 上。

  • 加密投票型副本仅支持部署在加密 Zone 上,不支持部署在常规读写 Zone上。