透明数据加密TDE(Transparent Data Encryption)可对数据文件执行实时I/O加密和解密,数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密。TDE不会增加数据文件的大小,开发人员无需更改任何应用程序,即可使用TDE功能。

前提条件

  • 实例类型为:
    • RDS MySQL 5.6
    • RDS MySQL 5.7高可用版(本地盘)
  • 已开通KMS。如果您未开通KMS,可在开通TDE过程中根据引导开通KMS。

背景信息

加密使用的密钥由密钥管理服务(KMS)产生和管理,RDS不提供加密所需的密钥和证书。部分可用区不仅可以使用阿里云自动生成的密钥,也可以使用自带的密钥材料生成数据密钥,然后授权RDS使用。

注意事项

  • TDE开通后无法关闭。
  • TDE开通后无法修改密钥。
  • 开通TDE后,用户如果要恢复数据到本地,需要先通过RDS解密数据
  • 开通TDE后,会显著增加CPU使用率。
  • 使用已有自定义密钥时,需要注意:
    • 禁用密钥、设置密钥删除计划或者删除密钥材料都会造成密钥不可用。
    • 撤销授权关系后,重启RDS实例会导致RDS实例不可用。
    • 需要使用主账号或者具有AliyunSTSAssumeRoleAccess权限的账号。
    说明 关于密钥的相关操作请参见密钥管理服务

使用由阿里云自动生成的密钥

  1. 登录 RDS 管理控制台
  2. 在页面左上角,选择实例所在地域。
    设置透明数据加密TDE_数据安全/加密_RDS MySQL 数据库_云数据库 RDS 版 阿里云技术文档 第1张
  3. 找到目标实例,单击实例ID。
  4. 在左侧菜单栏中单击 数据安全性
  5. TDE页签单击未开通左边的滑块。
    设置透明数据加密TDE_数据安全/加密_RDS MySQL 数据库_云数据库 RDS 版 阿里云技术文档 第2张
  6. 选择使用由阿里云自动生成的密钥,单击 确定,开通TDE。
    设置透明数据加密TDE_数据安全/加密_RDS MySQL 数据库_云数据库 RDS 版 阿里云技术文档 第3张

使用已有自定义密钥

  1. 登录 RDS 管理控制台
  2. 在页面左上角,选择实例所在地域。
    设置透明数据加密TDE_数据安全/加密_RDS MySQL 数据库_云数据库 RDS 版 阿里云技术文档 第4张
  3. 找到目标实例,单击实例ID。
  4. 在左侧菜单栏中单击 数据安全性
  5. TDE页签单击未开通左边的滑块。
    设置透明数据加密TDE_数据安全/加密_RDS MySQL 数据库_云数据库 RDS 版 阿里云技术文档 第5张
  6. 选择 使用已有自定义密钥,选择密钥,单击 确定,开通TDE。
    说明 如果没有自定义密钥,需要单击前往创建,在密钥管理服务控制台创建密钥并导入自带的密钥材料。详情请参见管理密钥
    设置透明数据加密TDE_数据安全/加密_RDS MySQL 数据库_云数据库 RDS 版 阿里云技术文档 第6张

加密操作

登录数据库,执行如下命令,对要加密的表进行加密。

  • MySQL 5.6
    alter table <tablename> engine=innodb,block_format=encrypted;
  • MySQL 5.7
    alter table <tablename> engine=innodb,encryption='Y';

解密操作

如果您要对TDE加密的表解密,请执行如下命令。

  • MySQL 5.6
    alter table <tablename> engine=innodb,block_format=default;
  • MySQL 5.7
    alter table <tablename> engine=innodb,encryption='N';

常见问题

  • 开启TDE后,常用数据库工具(Navicat等)还能正常使用吗?

    可以正常使用。

  • 加密后查看数据为什么还是明文的?

    查询数据时会解密并读取到内存,所以是明文显示。开启TDE可以防止备份泄露导致数据泄露,备份文件是加密的,无法用于恢复到本地,如果要恢复数据到本地,需要先解密数据

相关API

API 描述
ModifyDBInstanceTDE 开启RDS实例透明数据加密。