在 MySQL 中迁移安全配置,核心是确保目标实例具备与源实例相同的安全策略,同时避免因配置遗漏导致权限失控或服务中断。整个过程需要系统性地复制用户、权限、加密设置和审计策略,而不是简单导出导入数据。
迁移用户与权限
MySQL 的用户和权限信息存储在 mysql 数据库的多个表中,如 user、db、tables_priv 等。直接复制这些表存在风险,推荐使用逻辑方式导出和重建。
建议操作:
在源数据库使用 SHOW CREATE USER 和 SHOW GRANTS FOR 'user'@'host' 查看每个用户的创建语句和权限。 将输出结果保存为 SQL 脚本,在目标实例中执行,确保用户密码哈希和权限一致。 也可使用 mysqldump 导出 mysql 库中的关键表(谨慎操作):mysqldump mysql user db tables_priv columns_priv procs_priv > mysql_security.sql 导入后运行 FLUSH PRIVILEGES; 使更改生效。
复制加密与 SSL 配置
若源实例启用了连接加密(SSL/TLS),需在目标实例部署相同的证书和密钥文件。
关键步骤:
复制源服务器的 ca.pem、server-cert.pem、server-key.pem 到目标对应目录。 检查 my.cnf 或 my.ini 中的 [mysqld] 配置项:ssl-ca=ca.pem
ssl-cert=server-cert.pem
ssl-key=server-key.pem 重启目标 MySQL 服务,并用 SHOW VARIABLES LIKE '%ssl%'; 验证是否启用。 确保客户端连接字符串包含 ssl-mode=REQUIRED 或 VERIFY_IDENTITY。
同步密码策略与账户锁定设置
MySQL 支持通过 validate_password 组件强制密码复杂度,迁移时需确认目标环境已加载并配置相同规则。
操作建议:
在源库执行 SHOW VARIABLES LIKE 'validate_password%'; 查看策略等级、长度等。 在目标库安装插件(如未启用):INSTALL PLUGIN validate_password SONAME 'validate_password.so'; 根据源配置修改 my.cnf,例如:
validate_password.policy=MEDIUM
validate_password.length=8 若使用账户锁定(failed_login_attempts),确保相关参数一致。
审计日志与安全插件
如果源数据库启用了企业级审计(如 MySQL Enterprise Audit)或社区版 audit_log 插件,必须在目标端同样部署。
确认插件是否激活:SELECT * FROM mysql.plugin WHERE name LIKE '%audit%'; 若使用,导出审计规则并复制到目标服务器的配置文件中。 审计日志文件路径可能不同,需调整 file_audit_logging 配置项指向正确目录。
基本上就这些。迁移完成后,务必测试关键用户登录、远程连接加密、权限访问控制等功能是否正常。安全配置迁移不复杂但容易忽略细节,建议在非生产环境先行验证流程。
