为满足数据安全与合规性要求,您可以使用透明数据加密(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及以上。
多主集群(Limitless)
MySQL 8.0.1
需为8.0.1.0.42及以上。
MySQL 8.0.2
需为8.0.2.0.6及以上。
如果您计划使用自定义密钥,还需满足以下条件:
开通阿里云密钥管理服务(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功能。 |