更新时间:2024-10-14 GMT+08:00

开启透明数据加密功能

操作场景

透明数据加密(Transparent Data Encryption,简称TDE),对数据文件执行实时I/O加密和解密,数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密,能有效保护数据库及数据文件的安全。

TDE主要应对以下的场景:

  • 硬盘被盗导致数据泄露。
  • 黑客入侵系统进行文件复制导致数据泄露。在没有启用TDE的情况下,只要获得了数据库文件,即可直接浏览数据库中的所有内容,但如果在数据库上启用了TDE,整个数据被安全加密;没有密钥就不能访问到数据。

使用限制

  • 云数据库 RDS for MySQL实例已开通密钥管理服务(Key Management Service,KMS),加密使用的用户主密钥由KMS产生和管理,RDS不提供加密所需的密钥和证书。
  • 云数据库 RDS for MySQL的透明数据加密功能支持的内核版本为5.7(5.7.38.221000及以上),存储类型为SSD云盘。
  • 如需开通透明数据加密,您可以在管理控制台右上角,选择“工单 > 新建工单”,提交开通透明数据加密的申请。
  • TDE开通后不支持关闭以及修改默认主密钥。
  • TDE加密为数据库数据加密,包括全量备份,不包括增量备份。
  • 以下场景的实例不支持开启TDE:
    • 已开启异地容灾备份。
  • 已开启TDE的实例不支持以下操作:
    • 异地容灾备份。
    • TDE加密的备份恢复到已有其他已存在实例。
    • 按指定时间点恢复(PITR)时,不允许恢复到其他已存在实例。
    • 使用自定义密钥创建的手动备份,只能下载,不能恢复。
    • 使用默认密钥创建的手动备份和自动备份,不能下载。
  • TDE开通过程中,不会重启实例,但会显著增加CPU使用率,因此建议在业务低峰期操作。

开启实例级别的TDE加密功能

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域。
  3. 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
  4. “实例管理”页面,单击目标实例名称,进入实例的“概览”页面。
  5. 单击“TDE状态”后的“开启”。

    图1 开启实例级别的TDE加密功能

  6. 在弹出框中,单击“确定”,开启TDE加密功能。

    TDE加密功能一旦开启,将不允许关闭,请您谨慎操作。

    图2 TDE开启

  7. TDE开通后,如果您需要恢复数据到本地,参考以下两种方式:

    • 方式1:通过解密数据
      1. 通过RDS解密数据,请参考解密表
      2. 创建该数据库的手动备份。
      3. 获取备份文件并通过备份文件恢复数据。
    • 方式2:使用过渡密钥“--transition-key”
      1. 通过管理控制台创建手动备份时,按提示输入自定义的密钥字符串,对数据进行重新加密,详情请参考创建手动备份
        图3 自定义加密方式
      2. 下载全量备份文件,使用第三方全量备份工具Percona XtraBackup进行本地恢复。
        1. prepare 阶段: --transition-key = {自定义密钥}
        2. copy-back阶段:--transition-key={自定义密钥} --generate-new-master-key

加密或解密表

  • 请确保已成功开启实例级别的TDE加密功能。
  • 开启TDE后,常用数据库工具仍能正常使用。
  • 由于查询表数据时会解密并读取到内存中,因此查询加密的数据时结果仍是明文数据。开启TDE后,备份文件是加密后的密文数据,可以防止备份泄漏导致数据泄漏。
  1. 连接目标实例。

    请参考通过公网连接RDS for MySQL实例通过内网连接RDS for MySQL实例通过DAS连接RDS for MySQL实例

  2. 执行如下命令对表进行加密或解密,tablename 为需要加密或解密的表名。

    • 加密
      alter table tablename encryption='Y';
    • 解密
      alter table tablename encryption='N';