mysql数据加密 需配置传输层和存储层:先通过 ssl 实现传输加密,检查 SSL 支持与状态,配置证书并重启服务,强制用户 SSL 连接;再启用 keyring 插件如 keyring_file,重启后创建或修改表启用 InnoDB 表空间加密,最后验证加密状态并定期备份密钥文件。

MySQL 数据加密 主要分为两个层面:传输层加密(SSL/TLS)和数据存储层加密(透明数据加密 TDE 或表空间加密)。从 MySQL 5.7 开始,InnoDB 支持表空间级别的静态数据加密。以下是如何启用和配置 MySQL 数据加密的详细方法。
启用 SSL 加密(传输层加密)
确保客户端与服务器之间的通信加密,防止数据在传输过程中被窃听。
1. 检查是否支持 SSL:
mysql -u root -p -e “SHOW varIABLES LIKE ‘have_ssl‘;”
若返回 YES,表示支持 SSL。
2. 检查 SSL 状态:
mysql -u root -p -e “SHOW STATUS LIKE ‘Ssl_cipher’;”
如果输出非空,说明当前连接已使用 SSL。
3. 配置 MySQL 启用 SSL:
编辑 MySQL 配置文件(通常为 /etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf):
[mysqld]
ssl-ca=/path/to/ca-cert.pem
ssl-cert=/path/to/server-cert.pem
ssl-key=/path/to/server-key.pem
MySQL 安装时默认会在 data 目录下生成测试证书和密钥,可用于测试。
4. 重启 MySQL 服务:
sudo systemctl restart mysql
5. 强制用户使用 SSL 连接:
ALTER USER ‘username’@’%’ require SSL;
启用 InnoDB 表空间加密(静态数据加密)
MySQL 5.7 及以上版本支持 InnoDB 系统表空间和独立表空间的加密。
1. 启用 keyring 插件:
静态加密依赖 keyring 插件来管理加密密钥。常用插件有 keyring_file 和 keyring_okv。
安装 keyring_file 插件:
INSTALL PLUGIN keyring_file SONAME ‘keyring_file.so’;
或在 配置文件 中添加:
[mysqld]
early-plugin-load=keyring_file.so
keyring_file_data=/var/lib/mysql-keyring/keyring
注意:确保目录存在且 MySQL 有读写权限。
2. 重启 MySQL 服务使插件生效。
3. 创建加密表:
CREATE table t1 (id int) ENCRYPTION=’Y’;
4. 修改现有表启用加密:
ALTER TABLE t1 ENCRYPTION=’Y’;
5. 查看加密状态:
select TABLE_NAME, CREATE_OPTIONS FROM information_schema.TABLES WHERE TABLE_SCHEMA = ‘your_db’ AND CREATE_OPTIONS LIKE ‘%encryption%’;
注意事项与安全建议
• 备份 keyring 文件 :keyring 文件包含解密所需密钥,丢失将导致数据无法恢复。
• 使用强密码保护密钥文件,并限制访问权限。
• 生产环境建议使用更安全的 keyring_okv 或硬件安全模块(HSM)。
• 加密会影响 I/O 性能,建议对 敏感数据 表单独加密。
• 定期轮换密钥(MySQL 支持密钥轮换)。
基本上就这些。配置好后,MySQL 就实现了传输和存储双层加密,显著提升数据安全性。