mysql数据库被入侵如何排查_mysql安全事件分析方法

来源:这里教程网 时间:2026-02-28 20:34:08 作者:

发现网站异常、访问变慢、数据莫名消失或出现陌生账号,MySQL很可能已被入侵。排查不是靠猜,而是按线索逐层验证——重点看日志、账号、权限和网络行为。

查异常登录和连接记录

攻击者常反复尝试登录或建立大量空连接。先确认通用日志是否开启:

检查状态:执行
SHOW VARIABLES LIKE 'general_log%';
,若值为 OFF,说明默认不记所有操作;可临时开启:
SET GLOBAL general_log = 'ON';
快速筛查可疑登录:运行
SELECT * FROM mysql.general_log WHERE argument LIKE '%Access denied%' OR command_type = 'Connect' ORDER BY event_time DESC LIMIT 50;
,重点关注短时间高频失败、陌生 IP 或非常规时段的连接
结合系统日志:Linux 下查看
/var/log/auth.log
/var/log/secure
,搜索
mysql
3306
或大量
Failed password
记录

核对用户账号与权限配置

很多入侵从弱口令或冗余账号开始。直接进库查最真实:

列出所有账号:执行
SELECT User, Host FROM mysql.user;
,重点识别
test
''@'%'
(空用户名)、
root@'%'
这类高危组合
检查权限滥用:对每个非必要账号运行
SHOW GRANTS FOR 'username'@'host';
,特别警惕含
FILE
SHUTDOWN
GRANT OPTION
ALL PRIVILEGES
的授权
查是否有后门账号:留意用户名含特殊符号(如
admin_123
backdoor
)、Host 为
%
却无业务需求的条目

扫描异常SQL与数据变动

黑客常通过注入或提权写入恶意语句、清空表、导出敏感字段。需结合多类日志交叉比对:

慢查询日志里找暴力痕迹:开启后查看
slow-query.log
,过滤执行时间极短却频繁出现的
SELECT ... FROM mysql.user
UNION SELECT
LOAD_FILE
等语句
错误日志中定位破坏动作:执行
SHOW VARIABLES LIKE 'log_error';
找到错误日志路径,打开后搜索
DROP TABLE
TRUNCATE
CREATE FUNCTION
SELECT @@version
等典型操作
检查触发器与自定义函数:运行
SELECT * FROM mysql.func;
SELECT * FROM information_schema.TRIGGERS;
,确认是否存在非运维添加的函数或触发逻辑

验网络暴露与服务配置

不少入侵根本不需要密码——只因 MySQL 被直接暴露在公网:

确认监听范围:查看 MySQL 配置文件(如
/etc/mysql/mysql.conf.d/mysqld.cnf
),检查
[mysqld]
段中是否有
bind-address = 127.0.0.1
skip-networking
;若为
0.0.0.0
或缺失,则服务对外可见
验证端口开放情况:在服务器上执行
ss -tlnp | grep :3306
netstat -tuln | grep :3306
,观察 Local Address 是否包含非 127.0.0.1 的地址
检查防火墙策略:运行
ufw status
(Ubuntu)或
firewall-cmd --list-ports
(CentOS),确认 3306 是否被意外放行给全网

相关推荐