目录
一、存储加密说明
二、TDE概述
三、MySQL对TDE支持情况
四、注意事项
一、存储加密说明
MySQL数据库存储加密有多种方式可供选择,主要分为两大类:
- 利用字段加密,在对数据库存储/读取时进行加密/解密操作,需要用户修改应用程序
- 利用TDE透明加密客户端,实现数据库实例文件存储加密,用户无需修改应用程序
二、TDE概述
TDE(Transparent Data Encryption,透明数据加密) 即对数据文件执行实时I/O加密和解密。数据在写入磁盘之前进行加密,从磁盘读入内存时进行解密。TDE通过对MySQL数据库中的表空间进行加密,阻止可能的攻击者绕过数据库直接从存储中读取敏感信息。TDE加密具有如下优点:
- 开发人员无需更改任何应用程序
- 根据官方文档,启用后性能影响百分比在个位数(经验5%),启用TDE不会增加数据文件的大小
三、MySQL对TDE支持情况
MySQL 5.7 开始支持TDE,8.0提供更多的加密选项,社区版和企业版都可以,区别是企业版提供额外的keyring组件和插件,可以提供更好的安全性(如果要达到合规的要求,需要使用企业版),详细支持情况如下表所示:
keyring插件名称 | 社区版 | 企业版 | 备注 |
---|---|---|---|
component_keyring_file | 8.0.24+ | 8.0.24+ | - |
component_keyring_encrypted_file | 不支持 | 8.0.24+ | - |
component_keyring_oci | 不支持 | 8.0.31+ | - |
keyring_file | 5.7.11+ | 5.7.11+ | 将秘钥数据保存在本地的文件 |
keyring_encrypted_file | 不支持 | 5.7.21+ | 将秘钥数据保存在本地的加密文件 |
keyring_okv | 不支持 | 5.7.12+ | - |
keyring_aws | 不支持 | 5.7.19+ | 与Amazon KMS通信,用于后端存储 |
keyring_hashicorp | 不支持 | 8.0.18+ | 与HashiCorp Vault通信,用于后端存储 |
keyring_oci | 不支持 | 8.0.22+ | - |
四、注意事项
MySQL的keyring_file加密会有以下限制,使用时需要注意:
- 使用keyring_file 和 keyring_encrypted file 插件时,无法满足某些规范要求的密钥集中管理
- 高级加密标准(AES)是唯一支持的加密算法
- 表空间加密仅支持存储在单独表空间的InnoDB表,存储在其他InnoDB表空间类型(包括常规表空间,系统表空间,撤消日志表空间和临时表空间)中的表不支持加密。
- 一次只能启用一个keyring插件,不支持启用多个keyring插件
- 开启TDE后,由于查询表数据时会解密并读取到内存中,因此查询加密的数据时结果仍是明文数据,而常用数据库工具(Navicat等)可以正常使用
- 如果数据库实例上拥有至少一个加密的数据库,那么也可能会降低未加密数据库的性能,所以建议加密数据库和未加密数据库保存在不同的数据库实例上
- 更改密钥插件需要解密表,卸载当前的密钥插件,安装和配置其他密钥插件,并重新加密表
- 已经被加密的表(Innodb引擎)不允许修改成其它存储引擎
- 先配置主从复制,再分别启用tde加密,不会导致主从复制失败(即使主库与从库使用的不是同一个密钥文件)