为满足数据安全与合规性要求,您可以使用透明数据加密(TDE)功能。TDE在存储层对数据文件进行实时的I/O加密和解密,在数据写入磁盘前加密,从磁盘读入内存时解密。整个过程对应用程序完全透明,您无需修改任何业务代码即可实现数据的加密保护。
功能简介
PolarDB的TDE功能基于国际标准的AES(Advanced Encryption Standard)算法,密钥长度为256位,确保了加密的安全性。
TDE的密钥管理依赖于阿里云密钥管理服务(KMS)。您可以选择以下两种方式管理密钥:
- 服务密钥:由阿里云自动为您创建和管理,操作便捷,无需额外配置。 
- 自定义密钥:您可以在KMS中创建自己的密钥,并授权PolarDB使用。这种方式让您对密钥有完全的控制权,包括密钥的轮转、禁用和删除等生命周期管理,满足更高的合规性要求。 
前提条件
- 您的PolarDB MySQL版集群需满足以下内核版本要求: - 产品系列 - 数据库引擎 - 内核小版本 - 集群版 - MySQL 5.6 - 需为5.6.1.0.21及以上。 - MySQL 5.7 - 需为5.7.1.0.3及以上。 - MySQL 8.0.1、MySQL 8.0.2 说明- Serverless集群的MySQL 8.0.2版本不支持开启TDE。 - 需为8.0.1.1.1及以上。 - 标准版 - MySQL 5.7 - 需为5.7.1.0.3及以上。 - MySQL 8.0.1、MySQL 8.0.2 - 需为8.0.1.1.1及以上。 
- 如果您计划使用自定义密钥,还需满足以下条件: - 开通阿里云密钥管理服务(KMS)。 
- 使用阿里云主账号或具有 - AliyunSTSAssumeRoleAccess权限的RAM用户进行操作。
 
计费说明
- 存储费用:TDE不会增加数据文件的大小,因此不产生额外的存储费用。 
- 密钥费用: - 使用服务密钥:不收取任何费用。 
- 使用自定义密钥:PolarDB侧不收费,但在密钥管理服务(KMS)侧将产生相关的密钥费用。 
 
注意事项
- 源集群影响: - 功能开启后无法关闭。请在充分评估业务需求和影响后再执行此操作。 
- 开启TDE会导致集群重启,中断业务连接,请选择适合的业务低峰期进行操作。 
- 在I/O密集型(IO-bound)的业务场景下,开启TDE可能会对数据库性能产生一定影响。 
 
- 自定义密钥:使用自定义密钥时,密钥的可用性直接影响集群的可用性。 - 在KMS中对密钥执行禁用、计划删除或删除密钥材料等操作,会造成密钥不可用。 
- 撤销了对PolarDB的授权后,重启集群会导致集群不可用。 
 
- 全球数据库网络(GDN):支持为加入全球数据库网络(GDN)的集群开启TDE。 - 主集群开启后,所有从集群将自动同步开启,且所使用的密钥及密钥所在地域均与主集群相同,密钥所在地域不支持修改。 
- 不支持为GDN中的从集群单独开启TDE。 
 
操作指南
步骤一:为集群开启TDE加密
开启TDE加密将导致集群重启,并且一旦开启后无法关闭。因此,请在充分评估后谨慎进行操作。
- 前往PolarDB控制台,在目标集群详情页内,单击左侧导航栏中,在TDE配置页签,打开TDE状态开关。  
- 在弹出的对话框中,选择密钥类型: - 使用服务密钥(阿里云自动生成):无需额外配置,单击确定即可。 
- 使用已有自定义密钥:需要从下拉列表中选择一个您在KMS中已创建的密钥,然后单击确定。如果列表为空,请先前往KMS控制台创建密钥。 说明- 目前TDE支持的加密类型为 - Aliyun_AES_256与- Aliyun_SM4,创建KMS的密钥,请注意加密类型。
  
- 开通TDE大约需要10分钟时间,请您耐心等待集群重启。 
步骤二:(可选)为新建表自动开启加密
如果您希望此后在集群中创建的所有新表都自动应用加密,可以在开启TDE时进行设置,勾选高级选项开关即可。
- 适用场景:适用于对数据安全有严格要求,希望默认加密所有新产生数据的业务。 
- 版本要求: - MySQL 8.0,且 内核小版本需为8.0.1.1.15及以上。 
- MySQL 5.7,且 内核小版本需为5.7.1.0.35及以上。 
 
步骤三:为已有表加密和解密
为集群开启TDE后,并不会自动加密存量表。您需要通过ALTER TABLE命令手动为指定的存量表开启或关闭加密。
- 如果您打开了高级选项,则无需对新建的表执行加密操作,系统已自动加密。 
- 执行 - ALTER TABLE命令对表进行加密或解密时,该表会被锁定,期间无法进行读写操作。
| 数据库版本 | 加密表的命令 | 解密表的命令 | 
| MySQL 5.6 | 
 | 
 | 
| MySQL 5.7、MySQL 8.0 | 
 | 
 | 
步骤四:验证表是否已加密
您可以通过查询SHOW CREATE TABLE <table_name>;命令来确认表的加密状态。
- 对于MySQL 5.7、MySQL 8.0版本,如果返回信息包含 - ENCRYPTION='Y',则表示该表已加密。
- 对于MySQL 5.6版本,如果返回信息包含 - BLOCK_FORMAT=ENCRYPTED,则表示该表已加密。
常见问题
相关内容
相关API
| API | 描述 | 
| 查询PolarDB集群的TDE设置详情。 | |
| 查询PolarDB集群的自定义密钥列表。 | |
| 检查KMS密钥是否已存在。 | |
| 开启PolarDB集群的TDE功能。 |