MySQL数据库如何进行安全加固
小樊
40
2025-12-06 04:20:33
MySQL数据库安全加固清单
一 操作系统与文件系统
- 使用专用服务器/最小权限系统账号运行 mysqld,避免使用 root/Administrator;为 mysql 系统账号设置不可登录 shell(如:usermod -s /sbin/nologin mysql)。
- 将 my.cnf/my.ini 等配置文件权限收紧为仅属主可读写(如:chmod 600),并放置在受控目录(如:/etc/mysql/conf.d/)。
- 将 数据目录 datadir、日志文件、socket 放在非系统分区,权限最小化:datadir 建议 700 且属主为 mysql:mysql;socket 放入 datadir 并限制访问。
- 清理或屏蔽敏感痕迹:删除或软链 ~/.mysql_history,禁止 MYSQL_PWD 环境变量。
- 关闭不必要的端口与服务,仅开放 3306(或变更为非默认端口)并限制来源。
- 不要将数据库与日志放在系统分区(如 /、/var、/usr)。
二 MySQL实例与配置基线
- 运行 mysql_secure_installation:启用密码强度校验(VALIDATE PASSWORD)、修改 root 密码、删除匿名用户、禁止 root 远程登录、删除 test 库、重载权限。
- 关键参数建议:
- 禁用本地文件读取:set global local_infile=0;
- 绑定管理网段:set global bind-address=127.0.0.1(仅本机)或指定内网地址;
- 提升解析安全与性能:set global skip-name-resolve=1;
- 限制连接滥用:设置合理 max_connections;
- 禁止跳过权限校验:确保未启用 skip-grant-tables;
- 关闭符号链接:set global symbolic-links=0;
- 审计与合规:启用 错误日志 log-error,确保未开启 log-raw(避免明文密码记入日志)。
- 备份与恢复:定期使用 mysqldump 全量/增量备份,并定期恢复演练验证可用性。
三 账号与权限治理
- 遵循最小权限原则:按库/表/列授予所需权限,避免 GRANT ALL;定期回收不再使用的账号与权限。
- 规范账户与来源:删除或收紧 匿名用户 与 通配符主机(%) 的访问;为应用创建专用账号并限定来源 IP。
- 安全连接要求:对敏感账户强制 SSL/TLS,如:GRANT … TO ‘u’@‘h’ REQUIRE SSL;客户端连接时配置 ssl_ca/ssl_cert/ssl_key。
- 限制高危权限:非管理员账户禁用 FILE、SUPER、SHUTDOWN、CREATE USER 等;必要时以角色统一管理权限并定期审计。
- 密码与认证:启用 validate_password 强度策略;在 MySQL 8.0 可优先采用更安全的 caching_sha2_password 或 sha256_password 认证插件。
四 网络安全与加密
- 网络最小化暴露:通过 防火墙/安全组 仅允许应用服务器访问 3306;跨信任域或公网链路强制 SSL/TLS 加密传输。
- 监听与端口:生产环境建议 bind-address 绑定内网地址;如变更默认 3306,需同步更新防火墙与安全组规则。
- 传输中加密:为账户与客户端启用 REQUIRE SSL,并在客户端设置 ssl_ca/ssl_cert/ssl_key 参数。
- 静态数据加密:在 MySQL 8.0 可使用 InnoDB 表空间/redo/undo 加密 与 二进制日志加密;对备份文件与落盘数据实施静态加密与访问控制。
五 审计监控与持续运维
- 日志体系:启用并轮转 错误日志、通用查询日志、慢查询日志、二进制日志;对关键业务表或敏感操作建立审计能力(企业版可使用审计插件,或结合通用日志/第三方审计方案)。
- 监控与告警:持续监控错误日志与慢查询,设置异常连接/失败登录告警;定期分析 binlog 与审计记录。
- 补丁与版本:及时升级 MySQL 修复安全漏洞;定期进行漏洞扫描与安全基线核查。
- 备份策略:制定全量+增量备份与异地/多活策略,定期恢复演练并验证一致性。