2022-01-24 20:58:37
MySQL数据库访问日志分析是保障数据库安全的核心手段,通过日志可识别非法登录、异常SQL执行、访问模式异常等威胁,并采取针对性措施。 以下是具体方法与工具应用:
一、日志类型与启用方法General Log
作用:记录所有SQL语句(包括连接、查询、修改等),用于全面审计。
配置方法:修改MySQL配置文件(my.cnf或my.ini),添加以下内容并重启服务:[mysqld]general_log = 1general_log_file = /var/log/mysql/general.log
注意事项:
开启后磁盘I/O显著增加,高并发场景下影响性能,建议临时启用。
日志包含敏感信息(如密码),需严格限制访问权限。
Slow Query Log
作用:记录执行时间超过long_query_time(默认10秒)的SQL,用于发现性能问题及潜在攻击。
配置方法:[mysqld]slow_query_log = 1slow_query_log_file = /var/log/mysql/slow_query.loglong_query_time = 2 # 可调整阈值
安全应用场景:
检测SQL注入攻击(异常长查询)。
识别资源消耗型查询(如全表扫描、复杂JOIN)。
结合General Log分析慢查询来源IP。
工具选择
SIEM系统:如Splunk、ELK Stack(Elasticsearch+Logstash+Kibana),实现日志集中存储、搜索与可视化。
日志服务器:通过Rsyslog或Filebeat将日志传输至中央服务器,减少本地存储压力。
ELK Stack配置示例
Logstash:解析General Log并提取关键字段(如时间戳、IP、SQL语句)。input { file { path => "/var/log/mysql/general.log" start_position => "beginning" }}filter { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{NUMBER:thread_id} %{WORD:command} %{GREEDYDATA:sql}" } } geoip { source => "client_ip" } # 添加地理位置信息}output { elasticsearch { hosts => ["
Kibana:创建仪表盘监控登录失败次数、慢查询数量、异常IP分布等指标。

基础命令行工具
grep/awk:快速筛选异常记录。
查找特定用户登录失败:grep "Access denied for user 'bad_user'" /path/to/general.log
统计IP连接次数:awk '{print $6}' /path/to/general.log | sort | uniq -c | sort -nr
mysqldumpslow:分析Slow Query Log,找出高频慢查询。mysqldumpslow -s c -t 10 /path/to/slow_query.log # 显示执行次数最多的10条记录
专业工具
Splunk:支持复杂搜索、关联分析,可设置实时告警。
自定义脚本:结合Python/Perl编写脚本,实现定制化分析逻辑(如识别特定SQL模式)。
常见威胁类型
非法登录尝试:短时间内大量Access denied记录。
异常SQL语句:未授权的DROP TABLE、TRUNCATE等操作。
访问模式异常:来自非常规IP或高频访问(如每秒数百次查询)。
告警规则配置
阈值告警:登录失败次数超过5次/分钟触发通知。
模式匹配:检测包含SELECT * FROM password_table的SQL语句。
工具支持:ELK Stack的Watcher模块或Splunk的Alert功能。
性能影响
General Log和Slow Query Log会占用磁盘空间并增加I/O负载,生产环境建议:
仅在安全审计期间开启General Log。
调整long_query_time阈值,避免记录过多无关慢查询。
敏感信息保护
日志中可能包含明文密码或个人数据,需:
启用TLS加密日志传输。
存储时限制访问权限(如chmod 600 /var/log/mysql/*.log)。
替代方案
MariaDB Audit Plugin:提供更细粒度的审计功能(如按用户、表级别记录操作)。
ProxySQL:在代理层拦截异常SQL,减少对数据库直接影响。

步骤
启用Slow Query Log并设置long_query_time=1。
使用Kibana搜索执行时间超过5秒的SELECT语句。
检查异常查询的来源IP及用户代理(User-Agent)。
结合General Log确认是否为未授权访问。
输出示例
{ "timestamp": "2023-10-01T12:34:56Z", "ip": "192.0.2.100", "sql": "SELECT * FROM users WHERE id=1 OR 1=1--", "execution_time": 8.2}通过系统化日志分析,可构建覆盖“检测-分析-响应”全流程的MySQL安全防护体系,有效抵御数据泄露、篡改等风险。