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