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可访问目录










