官方文档:数据库透明加密概述-V4.3.2-OceanBase 数据库文档-分布式数据库使用文档
OceanBase 数据库社区版暂不支持数据透明加密。
数据存储加密是指对数据和 Clog 等保存在磁盘中的数据进行无感知的加密,即透明加密(简称 TDE)。数据在写入存储设备前自动进行加密,读取时自动解密,该过程对用户是透明的,黑客和恶意用户无法从数据文件、数据库备份或磁盘中读取到敏感数据。
一.Mysql模式下的数据透明加密:
使用限制
系统租户不能开启加密。
租户配置透明加密后,除非租户重建,否则无法再切换为其他加密模式。为新创建的表设置透明加密
为新创建的表设置透明加密
业务租户登录到集群的 MySQL 租户
1..执行以下语句,开启 internal 方式的透明加密。
ALTER SYSTEM SET tde_method='internal';
2.执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
的值均为 internal
。
SHOW PARAMETERS LIKE 'tde_method';
3.确认后,执行以下语句,生成主密钥。
ALTER INSTANCE ROTATE INNODB MASTER KEY;
4.创建表空间并指定加密算法
CREATE TABLESPACE sectest_ts1 encryption = 'y';
5.在加密的表空间中创建新表
CREATE TABLE t1 (id1 int, id2 int) TABLESPACE sectest_ts1;
6.确认表空间内的表是否标记为加密。
SELECT table_name,encryptionalg,encrypted FROM oceanbase.V$OB_ENCRYPTED_TABLES;
我这里测试版本是企业版V3 所以和 V4视图名称不一样。
为已有表设置透明加密
业务租户登录到集群的MySQL租户
1.执行以下语句,开启 internal 方式的透明加密。
ALTER SYSTEM SET tde_method='internal';
2.执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
的值均为 internal
。
SHOW PARAMETERS LIKE 'tde_method';
3.确认后,执行以下语句,生成主密钥。
ALTER INSTANCE ROTATE INNODB MASTER KEY;
4.创建表空间并指定加密算法。
CREATE TABLESPACE sectest_ts1 encryption = 'y';
5.创建t1表
CREATE TABLE t1 (id1 int, id2 int);
6.将已有表移入加密表空间
ALTER TABLE t1 TABLESPACE sectest_ts1;
解除加密:
假设表
t1
的加密状态如下,且表
t1
在加密的表空间
sectest_ts1
中。
![](https://i-blog.csdnimg.cn/direct/c5782af4f58b40f2aefdb10470afd42e.png)
![](https://i-blog.csdnimg.cn/direct/9b45dd77f7044031a5fd559704d01016.png)
对表执行渐进合并。
将
progressive_merge_num
的值设置为大于
1
的数,并执行
OPTIMIZE
命令,准备做渐进合并。
ALTER TABLE t1 SET progressive_merge_num = 3;
OPTIMIZE TABLE t1;
CREATE TABLESPACE ts2;
将表 t1
从加密的表空间 sectest_ts1
中移到未加密的表空间 ts2
中。
ALTER TABLE t1 TABLESPACE ts2;
SHOW CREATE TABLE t1 \G
查询 oceanbase.V$OB_ENCRYPTED_TABLES
视图,确认表的加密状态。
二.Oracle模式下的数据透明加密
为新创建的表设置存储加密
1.管理员用户登录到数据库的 Oracle 租户。
执行以下语句,开启 internal 方式的存储加密。
ALTER SYSTEM SET tde_method='internal';
2.执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
的值均为 internal
。
SHOW PARAMETERS LIKE 'tde_method';
3.创建 Keystore。
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE keystore_name IDENTIFIED BY password;
4.开启 Keystore。
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY password;
5.执行以下语句,生成主密钥。
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY password;
6.创建表空间并指定加密算法。
CREATE TABLESPACE sectest_ts1 ENCRYPTION USING 'aes-256';
7.验证加密是否配置成功
创建表并指定表空间。
CREATE TABLE t1 (id1 int, id2 int) TABLESPACE sectest_ts1;
确认表空间内的表是否标记为加密。
SELECT TABLE_NAME,ENCRYPTIONALG FROM v$encrypted_tables;
为已有表设置透明加密
1.管理员用户登录到数据库的 Oracle 租户
2.执行以下语句,开启 internal 方式的存储加密
ALTER SYSTEM SET tde_method='internal';
![](https://i-blog.csdnimg.cn/direct/5304948defba417f873cf20e827568e3.png)
3.执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
的值均为 internal
。
SHOW PARAMETERS LIKE 'tde_method';
4.创建 Keystore
ADMINISTER KEY MANAGEMENT CREATE KEYSTORE keystore_name IDENTIFIED BY password;
5.开启 Keystore
ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY password;
6.执行以下语句,生成主密钥
ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY password;
7.创建表空间并指定加密算法
CREATE TABLESPACE sectest_ts1 ENCRYPTION USING 'aes-256';
8.将已有表移入加密表空间
ALTER TABLE t1 TABLESPACE sectest_ts1;
对表执行全量合并
ALTER TABLE t1 set progressive_merge_num = 1;
ALTER SYSTEM MAJOR FREEZE;
SELECT * FROM v$encrypted_tables;
确认所有宏块是否已完成加密。
解除加密:
假设表 t1
的加密状态如下,且表 t1
在加密的表空间 sectest_ts1
中。
SELECT * FROM v$encrypted_tables;
SHOW CREATE TABLE t1;
将表从加密表空间中移出,创建未加密的表空间 ts2
。
CREATE TABLESPACE ts2;
ALTER TABLE t1 TABLESPACE ts2;
操作成功后,执行 SHOW CREATE TABLE
语句,可以看到表 t1
已经移到了表空间 ts2
中
SHOW CREATE TABLE t1;
SELECT * FROM sys.v$encrypted_tables;