设置透明数据加密TDE

更新时间:

在安全合规或静态数据加密等场景下,推荐使用透明数据加密TDE(Transparent Data Encryption)功能,对数据文件执行实时I/O加密和解密,通过在数据库层执行静态数据加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息,有效提高数据库中敏感数据的安全性。更多数据库加密技术介绍和对比,请参见不同数据库加密技术对比

背景信息

TDE通过在数据库层执行静止数据加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息。经过数据库身份验证的应用和用户可以继续透明地访问应用数据(不需要更改应用代码或配置),而尝试读取表空间文件中的敏感数据的OS用户以及尝试读取磁盘或备份信息的未知用户将不允许访问明文数据。

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

TDE加密使用的密钥由密钥管理服务(KMS)产生和管理,RDS不提供加密所需的密钥和证书。您不仅可以使用阿里云自动生成的密钥,也可以使用自定义密钥,授权RDS使用。

开通后,根据实例版本不同,加密算法如下:

  • RDS MySQL 8.0、5.7:目前支持的加密算法包括AES_256_CBC, SM4_CTR两种,使用参数innodb_encrypt_algorithm进行配置。

  • RDS MySQL 5.6:仅支持AES_128_ECB,不支持配置。

重要

参数innodb_encrypt_algorithm会影响实例内所有加密数据的加解密算法选择,包括加密表、加密日志,若参数和数据实际的加密算法不同,会导致解析失败,请谨慎切换。建议在切换参数innodb_encrypt_algorithm的值前,将已加密的数据全部解密,切换加密算法后再重新加密。

前提条件

  • 实例类型如下:

    • RDS MySQL 8.0高可用系列本地盘实例(内核小版本20191015及以上)

    • RDS MySQL 5.7高可用系列本地盘实例(内核小版本20191015及以上)

    • RDS MySQL 5.6

    说明
  • 已开通密钥管理服务(KMS)。如果您未开通KMS,可在开通TDE过程中根据引导开通KMS。

注意事项

  • 为保证实例的稳定性,建议您将内核小版本升级到最新。如果主实例包含只读实例,建议将所有只读实例和主实例的内核小版本都升级到最新。更多信息,请参见升级内核小版本

  • TDE开通过程中会重启实例造成实例切换,请做好业务安排,谨慎操作。实例切换的影响请参见实例切换的影响

  • TDE开通后无法关闭。

  • TDE开通后无法修改密钥。

  • TDE开通后,用户如果要恢复数据到本地,需要先通过RDS解密数据

  • TDE开通后,会显著增加CPU使用率。

  • 使用已有自定义密钥时,需要注意:

    • 禁用密钥、设置密钥删除计划或者删除密钥材料都会造成密钥不可用。

    • 撤销授权关系后,重启RDS实例会导致RDS实例不可用。

    • 需要使用主账号或者具有AliyunSTSAssumeRoleAccess权限的账号。

    说明

    关于密钥的相关操作请参见密钥管理服务密钥管理服务

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

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击数据安全性

  3. TDE页签单击未开通左边的滑块。

  4. 选择使用由阿里云自动生成的密钥,单击确定,开通TDE。

    说明

    该方式使用的加密密钥(KEK)为KMS的服务密钥。

使用已有自定义密钥开通TDE

  1. 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。

  2. 在左侧导航栏单击数据安全性

  3. TDE页签单击未开通左边的滑块。

  4. 选择 使用已有自定义密钥,选择密钥,单击确定,开通TDE。

    说明

    如果没有自定义密钥,需要单击前往创建,在密钥管理服务控制台创建密钥并导入自带的密钥材料。详情请参见创建密钥

加密操作

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

  • MySQL 5.6

    alter table <tablename> engine=innodb,block_format=encrypted;
  • MySQL 5.7或8.0

    alter table <tablename> encryption='Y';

解密操作

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

  • MySQL 5.6

    alter table <tablename> engine=innodb,block_format=default;
  • MySQL 5.7或8.0

    alter table <tablename> encryption='N';

常见问题

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

    可以正常使用。

  • 开启TDE后,还能正常迁移数据到其他RDS实例吗?

    可以正常迁移。

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

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

相关文档

相关API

API

描述

开启TDE

开启RDS实例透明数据加密时,需将TDEStatus参数设置为Enabled,其他参数请按需设置。