首批通过分布式安全可靠测评,为关键业务系统打造
数据库透明加密概述
更新时间:2026-04-10 11:58:01
数据存储加密是指对数据和 Clog 等保存在磁盘中的数据进行无感知的加密,即透明加密(简称 TDE)。数据在写入存储设备前自动进行加密,读取时自动解密,该过程对用户是透明的,黑客和恶意用户无法从数据文件、数据库备份或磁盘中读取到敏感数据。
OceanBase 数据库的用户数据和备份最终都是以二进制的形式,存储在磁盘或其它形式的永久存储上。无数据访问权限的用户可能会接触到这些存储,再通过外部操作对数据存储进行读取和解读,从而导致数据泄露。虽然 OceanBase 数据库的数据以压缩形式保存,具备一定的保密性,但仍旧有被破解的风险。为了保护存储在内存和硬盘中数据的安全,OceanBase 数据库现阶段支持国际上主流的加密算法 AES,与此同时,还支持国密算法 SM4。
两级密钥体系
透明数据加密使用两级密钥体系实现加解密功能。开启加密的最小粒度为数据库中的一个表,需要开启加密的表需要放到一个加密的表空间(Tablespace)中。OceanBase 数据库数据的加密单位为表空间,表空间仅是为了兼容 Oracle 数据库而设计的概念,可以简单理解为表空间是一组表的集合。每个加密的表空间设置有加密算法及对应的数据密钥,用于给表空间中的数据进行加密。每个租户有一个主密钥,用于对表空间的数据密钥进行加密,为了防止未经授权的解密操作,通常将主密钥存储于专门的 Keystore 中。

为了保证数据的安全性,用户无法使用 Keystore 直接查看主密钥和加密密钥信息,也无法指定主密钥和加密密钥,主密钥和加密密钥由系统生成,并且不会直接通过明文存储到磁盘上,大大提高了系统的安全性。
Keystore 是主密钥的管理模块,提供密钥管理服务。Keystore 的功能包括:
- 主密钥的生成:主密钥由 Keystore 根据加密算法生成,用户无法指定,这样也更加的安全。
- 主密钥相关信息存储:根据主密钥相关信息 Keystore 可以获取得到主密钥,Keystore 需要保证相关信息的多副本特性,一致性特性和故障处理。
- 主密钥管理和多版本控制:Keystore 负责主密钥的修改和多版本控制,多版本机制允许新生成的主密钥无需立即生效,可以逐步完成主密钥的替换。
- 获取主密钥的高可用服务。
- 处理 Keystore 的操作指令。
开启透明加密时需要指定其主密钥存储方式,通过配置项 tde_method 来控制,其取值如下:
tde_method 取值 |
含义 |
|---|---|
none |
关闭存储加密 |
internal |
开启,主密钥存储于内部表 |
bkmi |
开启,主密钥存储于外部 BKMI 系统 |
在 OceanBase 数据库中,当前 “私有云” 仅支持 internal 方式的透明表空间加密。internal 方式的存储主密钥,其加密信息主要在内部表中进行管理。为了避免日志回放时的循环依赖,该加密方式下的 Clog 不做加密。
开启加密时,使用主密钥对数据密钥进行加密后得到加密的数据密钥密文,该密文会存储在内部表、宏块头部、Clog 头部中,数据密钥不会明文存储在任何地方。需要加解密数据时,使用主密钥解密该密文后得到数据密钥,从而对宏块或 Clog 中的用户数据进行加解密操作。
使用限制:
- 系统租户不能开启加密。
- 租户配置存储加密后,除非租户重建,否则无法再切换为其他加密方式。
加密生效机制
用户存储在磁盘上的数据包括了 clog 和宏块两类,只有在将数据实际写到磁盘上时加密才会生效,内存中的数据是不加密的。若将原本不加密的表改为加密后,原先已经存储在磁盘上的未加密的 clog 和宏块数据不会变为加密,后续新写到磁盘上的数据才是加密的。由于每一条 clog 和每一个宏块都会记录加密元信息,因此加密和未加密的数据可以同时存在。
clog 是采用追加写的方式写到磁盘上的,因此旧的未加密的 clog 永远不会变为加密。等开启加密一段时间,旧的 clog 都被回收后,磁盘上的 clog 数据就会都成为加密数据了。对于宏块数据,只有在转储或合并时才会发生写入,可以手动触发全量合并将未加密的宏块数据重写为加密的。
支持的加密算法
OceanBase 数据库现阶段支持国际上主流的加密算法 AES,与此同时,还支持国密算法 SM4。
| 算法 | 密钥长度 | 模式 |
|---|---|---|
| AES | 128 bits 192 bits 256 bits | ecb,gcm |
| SM4 | 128 bits | cbc,gcm |