增加或删除加密 Zone ================================= OceanBase 数据库提供了 Zone 级别的日志传输和保存加密功能,您可以在集群中添加 Zone 时,指定 Zone 的加密属性,后续在向该加密 Zone 发送日志时,系统会对 Clog 进行加密,并且该 Zone 在持久化 Clog 时也会加密。 添加加密 Zone ------------------------------ 本节以下述集群为例,提供加密 Zone 的添加方法。 假设集群中已有 2个 Zone: `z1` 和 `z2`,需要添加一个Zone `z3`。其中,`z1` 和 `z2` 是常规读写 Zone,`z3` 是加密 Zone,`z3` 只包含加密的事务日志数据。 添加加密 Zone 的步骤如下: 1. 使用 root 用户登录数据库的 sys 租户。 2. 依次执行以下语句,生成主密钥。 ```sql obclient> ALTER SYSTEM set tde_method = 'internal'; obclient>ALTER INSTANCE ROTATE INNODB MASTER KEY; ``` 3. 执行以下语句,检查上一步中生成的主密钥是否生效。 ```sql 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 上主密钥的版本信息,其表结构如下: ```unknow 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 的语句会失败。 ```sql obclient> ALTER SYSTEM ADD Zone 'z3' zone_type = 'encryption'; ``` 5. 分别执行以下命令,调整系统租户的 Locality。 由于集群之前为 2 副本,为保证系统租户的高可用,在添加完加密 Zone 后,需要将系统租户补充为 3 副本。 ```sql 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 轮转主密钥。 ```sql obclient> ALTER INSTANCE ROTATE INNODB MASTER KEY; ``` **说明** 在轮转主密钥时,如果出现了 OBServer 宕机,加密 Zone 上的 OBServer 宕机不会对主密钥生效产生影响,但常规 Zone 上的 OBServer 宕机对主密钥的生效可能产生影响,可能会导致轮转生成的新主密钥不能立即生效。 删除加密 Zone ------------------------------ 加密 Zone 添加成功后,如果需要删除加密 Zone,其操作与常规读写 Zone 的删除操作相同,您可以使用以下语句删除该加密 Zone: ```sql obclient> ALTER SYSTEM DELETE ZONE 'z3'; ``` 加密 Zone 使用限制 --------------------------------- 加密 Zone 和加密投票型副本的使用有一定限制,具体限制如下: * 加密 Zone 上仅支持部署加密投票型副本,不支持部署其他类型的副本,例如全功能副本、只读副本、普通日志副本等均不能部署在加密 Zone 上。 * 加密投票型副本仅支持部署在加密 Zone 上,不支持部署在常规读写 Zone上。