MySQL 默认安装后安全性较弱,必须手动加固。核心是限制访问、最小权限、加密通信和日志审计四个方向。
修改默认 root 密码并禁用空密码登录
安装后 root 用户常无密码或仅本地可登录,这是最大风险点。需立即设置强密码,并确认禁止匿名用户:
登录 MySQL 后执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourStrongPass123!'; 删除匿名账户:DROP USER ''@'localhost'; 刷新权限:FLUSH PRIVILEGES; 检查剩余用户:SELECT User, Host FROM mysql.user; 确保无空用户名或非必要远程 host(如 '%')限制 root 远程访问,创建专用管理账号
root 不应从任意 IP 登录。生产环境建议只允许本地管理,远程操作使用带限制的专用账号:
禁止 root 远程登录:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; 新建运维账号(例如 admin_op),仅允许可信网段:CREATE USER 'admin_op'@'192.168.10.%' IDENTIFIED BY 'OpPass456!'; 授予最小必要权限,例如仅 SELECT/INSERT/UPDATE/DELETE + SHOW VIEW:GRANT SELECT, INSERT, UPDATE, DELETE, SHOW VIEW ON *.* TO 'admin_op'@'192.168.10.%'; 避免使用 GRANT ALL —— 特别是 FILE、SHUTDOWN、SUPER 等高危权限启用强制密码策略与连接加密
防止弱口令被爆破,同时避免明文传输账号密码:
在 my.cnf 的 [mysqld] 段启用密码强度校验插件:validate_password.policy=STRONG,并设最低长度:validate_password.length=12 生成 SSL 证书(可自签)并配置:ssl-ca=/etc/mysql/ssl/ca.pem,ssl-cert=/etc/mysql/ssl/server-cert.pem,ssl-key=/etc/mysql/ssl/server-key.pem 强制客户端使用 SSL 连接:ALTER USER 'admin_op'@'192.168.10.%' REQUIRE SSL; 验证是否生效:SHOW VARIABLES LIKE '%ssl%'; 和 STATUS; 中查看 SSL 状态关闭危险功能与启用审计日志
禁用非必要服务降低攻击面,记录关键操作便于追溯:
禁用 LOCAL INFILE(防文件读取漏洞):local_infile=OFF(my.cnf 中设置) 禁用符号链接支持(防路径穿越):symbolic-links=OFF 开启通用查询日志或错误日志详细级别(谨慎启用通用日志,因影响性能):log_error_verbosity=3 更推荐使用 MySQL Enterprise Audit 插件或 Percona Toolkit 的 pt-audit 工具做操作审计;社区版可结合 binlog + 定期审查 user 表变更