RDS MySQL支持透明数据加密TDE(Transparent Data Encryption),即对数据文件执行实时I/O加密和解密。数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密。TDE不会增加数据文件的大小,开发人员无需更改任何应用程序,即可使用TDE功能。
前提条件
- 实例类型如下:
- RDS MySQL 8.0高可用版本地盘实例(内核小版本20191015及以上)
- RDS MySQL 5.7高可用版本地盘实例(内核小版本20191015及以上)
- RDS MySQL 5.6
说明 如需升级内核小版本,请参见升级内核小版本。 - 已开通KMS。如果您未开通KMS,可在开通TDE过程中根据引导开通KMS。
背景信息
TDE通过在数据库层执行静止数据加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息。经过数据库身份验证的应用和用户可以继续透明地访问应用数据(不需要更改应用代码或配置),而尝试读取表空间文件中的敏感数据的OS用户以及尝试读取磁盘或备份信息的未知用户将不允许访问明文数据。
TDE加密使用的密钥由密钥管理服务(KMS)产生和管理,RDS不提供加密所需的密钥和证书。您不仅可以使用阿里云自动生成的密钥,也可以使用自定义密钥,授权RDS使用。
说明 开通后,根据实例版本不同,加密算法如下:
- RDS MySQL 8.0、5.7:AES_256_CBC
- RDS MySQL 5.6:AES_128_ECB
注意事项
- 为保证实例的稳定性,建议您将内核小版本升级到最新。如果主实例包含只读实例,建议将所有只读实例和主实例的内核小版本都升级到最新。更多信息,请参见升级内核小版本。
- TDE开通过程中会重启实例造成闪断,请做好业务安排,谨慎操作。
- TDE开通后无法关闭。
- TDE开通后无法修改密钥。
- TDE开通后,用户如果要恢复数据到本地,需要先通过RDS解密数据。
- TDE开通后,会显著增加CPU使用率。
- 使用已有自定义密钥时,需要注意:
- 禁用密钥、设置密钥删除计划或者删除密钥材料都会造成密钥不可用。
- 撤销授权关系后,重启RDS实例会导致RDS实例不可用。
- 需要使用主账号或者具有AliyunSTSAssumeRoleAccess权限的账号。
说明 关于密钥的相关操作请参见密钥管理服务。
使用由阿里云自动生成的密钥
- 访问RDS实例列表,在上方选择地域,然后单击目标实例ID。
- 在左侧导航栏单击数据安全性。
- 在TDE页签单击未开通左边的滑块。
- 选择使用由阿里云自动生成的密钥,单击确定,开通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实例透明数据加密。 |