首批通过分布式安全可靠测评,为关键业务系统打造
增加或删除加密 Zone
更新时间:2026-05-26 12:52:40
OceanBase 数据库提供了 Zone 级别的日志传输和保存加密功能,您可以在集群中添加 Zone 时,指定 Zone 的加密属性,后续在向该加密 Zone 发送日志时,系统会对 Clog 进行加密,并且该 Zone 在持久化 Clog 时也会加密。
说明
当需要加密投票型副本时,需要添加加密 Zone。有关副本的详细信息,请参见 副本概述。
使用限制
加密 Zone 和加密投票型副本的使用有一定限制,具体限制如下:
加密 Zone 上仅支持部署加密投票型副本,不支持部署其他类型的副本,例如全功能型副本、只读型副本、普通日志型副本等均不能部署在加密 Zone 上。
加密投票型副本仅支持部署在加密 Zone 上,不支持部署在读写 Zone 上。
添加加密 Zone
本节以下述集群为例,提供加密 Zone 的添加方法。
假设集群中已有 2个 Zone: z1 和 z2,需要添加一个Zone z3。其中,z1 和 z2 是常规读写 Zone,z3 是加密 Zone,z3 只包含加密的事务日志数据。
添加加密 Zone 的步骤如下:
使用 root 用户登录数据库的 sys 租户。
依次执行以下语句,设置加密模式并生成主密钥。
obclient> ALTER SYSTEM set tde_method = 'internal'; obclient>ALTER INSTANCE ROTATE INNODB MASTER KEY;执行以下语句,检查上一步中生成的主密钥是否生效。
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表示没有已经生效的主密钥。
执行以下命令,添加加密 Zone。
注意
在添加加密 Zone 前,系统租户必须要有一个已生效的主密钥,如果系统租户没有一个生效的主密钥,则执行添加加密 zone 的语句会失败。
obclient> ALTER SYSTEM ADD Zone 'z3' zone_type = 'encryption';分别执行以下命令,调整系统租户的 Locality,有关 Locality 的详细介绍请参见 Locality 概述。
由于集群之前为 2 副本,为保证系统租户的高可用,在添加完加密 Zone 后,需要将系统租户补充为 3 副本。且该加密 Zone
z3的副本类型必须为加密投票型副本。obclient> CREATE RESOURCE POOL sys_pool2 unit_num = 1, zone_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 轮转主密钥。
使用
root用户登录数据库的sys租户。执行以下语句,为加密 Zone 轮转主密钥。
obclient> ALTER INSTANCE ROTATE INNODB MASTER KEY;说明
在轮转主密钥时,如果出现了 OBServer 宕机,加密 Zone 上的 OBServer 宕机不会对主密钥生效产生影响,但读写 Zone 上的 OBServer 宕机对主密钥的生效可能产生影响,可能会导致轮转生成的新主密钥不能立即生效。
删除加密 Zone
加密 Zone 添加成功后,如果需要删除加密 Zone,其操作与读写 Zone 的删除操作相同,且在删除加密 Zone 前,需要保证该 Zone 下已不存在 OBServer,否则将会导致删除失败。
使用
root用户登录数据库的sys租户。执行以下语句,删除加密 Zone。
示例如下:
obclient> ALTER SYSTEM DELETE ZONE 'z3';完成后,执行以下语句,确认该 Zone 是否删除成功。
示例如下:
obclient> SELECT * FROM __all_zone; +----------------------------+----------------------------+-------+--------------------------+------------------+--------------+ | gmt_create | gmt_modified | zone | name | value | info | +----------------------------+----------------------------+-------+--------------------------+------------------+--------------+ | 2021-11-22 10:33:10.445956 | 2021-11-22 10:33:10.445956 | | cluster | 0 | test321_0930 | | 2021-11-22 10:33:10.446963 | 2021-11-23 15:40:01.140640 | | config_version | 1637653201137839 | | | 2021-11-22 10:33:10.445909 | 2021-11-24 02:00:01.633458 | | frozen_time | 1637690410847191 | | | 2021-11-22 10:33:10.445909 | 2021-11-24 02:00:01.633458 | | frozen_version | 4 | | | 2021-11-22 10:33:10.446963 | 2021-11-22 10:33:10.446963 | | gc_schema_version | 0 | | | 2021-11-22 10:33:10.446963 | 2021-11-24 02:00:20.858275 | | global_broadcast_version | 4 | | | 2021-11-22 10:33:10.446963 | 2021-11-22 10:33:10.446963 | | is_merge_error | 0 | | | 2021-11-22 10:33:10.446963 | 2021-11-24 02:01:28.922658 | | last_merged_version | 4 | | | 2021-11-22 10:33:10.446963 | 2021-11-24 02:01:28.924652 | | lease_info_version | 1637690488921414 | | | 2021-11-22 10:33:10.446963 | 2021-11-24 02:01:28.924652 | | merge_status | 0 | IDLE | | 2021-11-22 10:33:10.446963 | 2021-11-22 10:33:10.446963 | | privilege_version | 0 | | | 2021-11-22 10:33:10.446963 | 2021-11-22 10:33:10.446963 | | proposal_frozen_version | 1 | | | 2021-11-22 10:33:10.446963 | 2021-11-22 10:33:10.446963 | | snapshot_gc_ts | 0 | | | 2021-11-22 10:33:10.448018 | 2021-11-22 10:33:10.448018 | | storage_format_version | 4 | | | 2021-11-22 10:33:10.446963 | 2021-11-22 10:33:10.446963 | | time_zone_info_version | 0 | | | 2021-11-22 10:33:10.445909 | 2021-11-22 10:33:10.445909 | | try_frozen_version | 1 | | | 2021-11-22 10:33:10.446963 | 2021-11-22 10:33:10.446963 | | warm_up_start_time | 0 | | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:01:18.776935 | zone1 | all_merged_version | 4 | | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:00:21.553240 | zone1 | broadcast_version | 4 | | | 2021-11-22 10:33:10.449072 | 2021-11-22 10:33:21.596525 | zone1 | idc | 0 | HZ0 | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:01:18.776935 | zone1 | is_merge_timeout | 0 | | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:01:18.775879 | zone1 | is_merging | 0 | | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:01:18.775879 | zone1 | last_merged_time | 1637690478775672 | | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:01:18.775879 | zone1 | last_merged_version | 4 | | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:00:21.553240 | zone1 | merge_start_time | 1637690421552453 | | | 2021-11-22 10:33:10.448018 | 2021-11-24 02:01:18.776935 | zone1 | merge_status | 0 | IDLE | | 2021-11-22 10:33:10.449072 | 2021-11-22 10:33:10.449072 | zone1 | recovery_status | 0 | NORMAL | | 2021-11-22 10:33:10.449072 | 2021-11-22 10:33:10.449072 | zone1 | region | 0 | HANGZHOU | | 2021-11-22 10:33:10.448018 | 2021-11-22 10:33:10.448018 | zone1 | status | 2 | ACTIVE | | 2021-11-22 10:33:10.449072 | 2021-11-22 10:33:10.449072 | zone1 | storage_type | 0 | LOCAL | | 2021-11-22 10:33:10.448018 | 2021-11-22 10:33:10.448018 | zone1 | suspend_merging | 0 | | | 2021-11-22 10:33:10.449072 | 2021-11-22 10:33:10.449072 | zone1 | zone_type | 0 | ReadWrite | +----------------------------+----------------------------+-------+--------------------------+------------------+--------------+ 32 rows in set