暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

OceanBase 透明加密TDE,让数据无感知加密!

kk的DBA随笔 2024-11-18
99

官方文档:数据库透明加密概述 - V4.3.2-OceanBase 数据库文档 - 分布式数据库使用文档

OceanBase 数据库社区版暂不支持数据透明加密。

数据存储加密是指对数据和 Clog 等保存在磁盘中的数据进行无感知的加密,即透明加密(简称 TDE)。数据在写入存储设备前自动进行加密,读取时自动解密,该过程对用户是透明的,黑客和恶意用户无法从数据文件、数据库备份或磁盘中读取到敏感数据。

一.Mysql 模式下的数据透明加密:

使用限制
  • 系统租户不能开启加密。


  • ##### 租户配置透明加密后,除非租户重建,否则无法再切换为其他加密模式。为新创建的表设置透明加密

为新创建的表设置透明加密

业务租户登录到集群的 MySQL 租户

1.. 执行以下语句,开启 internal 方式的透明加密。
  1. ALTER SYSTEM SET tde_method='internal';

2. 执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
 的值均为 internal
  1. SHOW PARAMETERS LIKE 'tde_method';

3. 确认后,执行以下语句,生成主密钥。
  1. ALTER INSTANCE ROTATE INNODB MASTER KEY;

4. 创建表空间并指定加密算法
  1. CREATE TABLESPACE sectest_ts1 encryption = 'y';

5. 在加密的表空间中创建新表
  1. CREATE TABLE t1 (id1 int, id2 int) TABLESPACE sectest_ts1;

6. 确认表空间内的表是否标记为加密。
  1. SELECT table_name,encryptionalg,encrypted FROM oceanbase.V$OB_ENCRYPTED_TABLES;

我这里测试版本是企业版 V3 所以和 V4 视图名称不一样。

为已有表设置透明加密

业务租户登录到集群的 MySQL 租户
1. 执行以下语句,开启 internal 方式的透明加密。
  1. ALTER SYSTEM SET tde_method='internal';

2. 执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
 的值均为 internal
  1. SHOW PARAMETERS LIKE 'tde_method';

3. 确认后,执行以下语句,生成主密钥。
  1. ALTER INSTANCE ROTATE INNODB MASTER KEY;

4. 创建表空间并指定加密算法。
  1. CREATE TABLESPACE sectest_ts1 encryption = 'y';

5. 创建 t1 表
  1. CREATE TABLE t1 (id1 int, id2 int);

6. 将已有表移入加密表空间
  1. ALTER TABLE t1 TABLESPACE sectest_ts1;

解除加密:

假设表  t1
 的加密状态如下,且表  t1
 在加密的表空间  sectest_ts1
 中。

对表执行渐进合并。

将  progressive_merge_num
 的值设置为大于  1
 的数,并执行  OPTIMIZE
 命令,准备做渐进合并。

  1. ALTER TABLE t1 SET progressive_merge_num = 3;

  1. OPTIMIZE TABLE t1;

  1. CREATE TABLESPACE ts2;

将表 t1
 从加密的表空间 sectest_ts1
 中移到未加密的表空间 ts2
 中。

  1. ALTER TABLE t1 TABLESPACE ts2;

  1. SHOW CREATE TABLE t1 \G

查询 oceanbase.V$OB_ENCRYPTED_TABLES
 视图,确认表的加密状态。

二.Oracle 模式下的数据透明加密

为新创建的表设置存储加密

1. 管理员用户登录到数据库的 Oracle 租户。

执行以下语句,开启 internal 方式的存储加密。

  1. ALTER SYSTEM SET tde_method='internal';

2. 执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
 的值均为 internal
  1. SHOW PARAMETERS LIKE 'tde_method';

3. 创建 Keystore。
  1. ADMINISTER KEY MANAGEMENT CREATE KEYSTORE keystore_name IDENTIFIED BY password;

4. 开启 Keystore。
  1. ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY password;

5. 执行以下语句,生成主密钥。
  1. ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY password;

6. 创建表空间并指定加密算法。
  1. CREATE TABLESPACE sectest_ts1 ENCRYPTION USING 'aes-256';

7. 验证加密是否配置成功

创建表并指定表空间。

  1. CREATE TABLE t1 (id1 int, id2 int) TABLESPACE sectest_ts1;

确认表空间内的表是否标记为加密。

  1. SELECT TABLE_NAME,ENCRYPTIONALG FROM v$encrypted_tables;

为已有表设置透明加密

1. 管理员用户登录到数据库的 Oracle 租户
2. 执行以下语句,开启 internal 方式的存储加密
  1. ALTER SYSTEM SET tde_method='internal';

3. 执行以下语句,确认该租户上所有 OBServer 节点上的配置项 tde_method
 的值均为 internal
  1. SHOW PARAMETERS LIKE 'tde_method';

4. 创建 Keystore
  1. ADMINISTER KEY MANAGEMENT CREATE KEYSTORE keystore_name IDENTIFIED BY password;

5. 开启 Keystore
  1. ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY password;

6. 执行以下语句,生成主密钥
  1. ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY password;

7. 创建表空间并指定加密算法
  1. CREATE TABLESPACE sectest_ts1 ENCRYPTION USING 'aes-256';

8. 将已有表移入加密表空间
  1. ALTER TABLE t1 TABLESPACE sectest_ts1;

对表执行全量合并

  1. ALTER TABLE t1 set progressive_merge_num = 1;

  1. ALTER SYSTEM MAJOR FREEZE;

  1. SELECT * FROM v$encrypted_tables;

确认所有宏块是否已完成加密。

解除加密:

假设表 t1
 的加密状态如下,且表 t1
 在加密的表空间 sectest_ts1
 中。
  1. SELECT * FROM v$encrypted_tables;

  1. SHOW CREATE TABLE t1;

将表从加密表空间中移出,创建未加密的表空间 ts2
  1. CREATE TABLESPACE ts2;

  1. ALTER TABLE t1 TABLESPACE ts2;

操作成功后,执行 SHOW CREATE TABLE
 语句,可以看到表 t1
 已经移到了表空间 ts2
 中

  1. SHOW CREATE TABLE t1;

  1. SELECT * FROM sys.v$encrypted_tables;

可以看到表 t1
 的 STATUS
 字段为 NORMAL
 即未加密状态,说明表 t1
 解除加密操作成功。


文章转载自kk的DBA随笔,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论