mysql默认配置极不安全,须人工加固:立即设置 root 强密码、删除匿名用户;绑定 bind-address=127.0.0.1 限制本地访问;禁用 FILE/SHUTDOWN 等高危权限;启用 ssl 加密通信 并开启日志审计。

MySQL 默认用户不安全。安装后自带的 root 空密码账号、匿名用户、test数据库 开放权限、全网 接口 监听等,默认配置几乎等于“开门迎客”。真正可用的安全状态,必须靠人工逐项加固。
root 空密码和匿名用户是最大突破口
mysql 安装 完成时,'root'@'localhost'通常无密码,部分版本还附带空用户名(''@'localhost')——这意味着只要能连上本地 MySQL 服务,无需任何凭证就能登录,并拥有最高权限。更危险的是,该匿名用户默认对 test 库有全部操作权,可创建大表耗尽磁盘、写入恶意数据,甚至配合 select …… INTO OUTFILE 导出系统文件。
- 立即执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '强密码'; - 删除匿名用户:
DROP USER ''@'localhost'; - 刷新权限:
FLUSH PRIVILEGES;
网络暴露面远超预期
默认配置中 bind-address 常为 0.0.0.0 或未设置,导致 MySQL 监听所有网卡 IP,包括公网接口。一旦 端口(默认 3306)被扫描到,攻击者即可发起暴力破解或利用已知漏洞(如 CVE-2012-2122)绕过认证。
- 编辑
my.cnf或my.ini,强制限定为:bind-address = 127.0.0.1(仅本地) - 若需远程访问,必须搭配 防火墙 策略(如 iptables/ufw),只放行可信 IP 段
- 禁用
skip-networking以外的任何“图省事”配置
权限体系极易被滥用
默认用户不仅密码弱,权限也过度宽松。root 可执行 SHUTDOWN、FILE、PROCESS 等高危操作;普通业务账号若被赋予 GRANT OPTION 或跨库权限,可能横向提权或篡改系统表(如mysql.user)。
- 检查高危权限:
SELECT user,host,shutdown_priv,file_priv,process_priv FROM mysql.user; - 业务账号一律禁用
FILE、SHUTDOWN、GRANT OPTION - 按最小权限原则授权:
GRANT SELECT,INSERT ON app_db.* TO 'app_user'@'10.10.20.%';
通信与日志长期裸奔
MySQL 默认不启用 SSL/TLS,所有账号密码、sql 语句 、返回结果均以明文传输,内网抓包即可还原完整业务逻辑;同时general_log 和slow_query_log默认关闭,无法追溯异常行为,攻击发生后难以取证。
- 启用 SSL:在
[mysqld]段配置ssl-ca、ssl-cert、ssl-key路径 - 强制用户走 SSL:
CREATE USER 'safe_user'@'%' require SSL; - 开启通用日志(临时审计用):
SET GLOBAL general_log = ON;,日志路径需设在非 web 可访问目录