mysql安全优化

一、查看mysql日志

1、mysql开启通用日志(记录所有客户端连接、和执行的sql语句);

SHOW VARIABLES LIKE 'general_log%'; -- 检查是否开启日志 OFF/ON

SET GLOBAL general_log = 'ON'; -- 开启日志

SELECT * FROM mysql.general_log; -- 查看日志内容

*默认输出的日志文件(如:/var/log/mysql.log),可通过log_output参数切换表形式

2、临时开启慢查询日志

SHOW VARIABLES LIKE 'slow_query_log%'; -- 是否开启慢查询日志OFF/ON

SET GLOBAL slow_query_log = 'ON';

SHOW VARIABLES LIKE 'long_query_time'; -- 查看阀值(默认10秒)

SET GLOBAL log_output = 'file'; -- 日志输出到文件

(windows:my.ini;linux:my.cnf 慢查询日志配置文件路径参数:slow_query_file)

通过SHOW VARIABLES LIKE '%query%';查询当前配置

3、永久修改

slow_query_log = 1; -- 开启

slow_query_log_file = /var/lib/mysql/slow-query.log

long_query_time = 1; -- 1秒

log_queries_not_using_indexes = 1

*重启systemctl restart mysqld


3、记录服务器作物和警告,默认位于数据目录的hostname.err文件(也可查询日志错误路径)

SHOW VARIABLES LIKE 'log_error'; -- 查看MySQL错误日志的存储路径和配置信息


二、检查攻击日志分析要点

1、异常登录尝试(在错误日志中会频繁出现访问拒绝:Access denied,或在通用日志中非常归时间段的连接请求)

2、可疑sql语句(1、通用日志中大量非常规查询,如:DROP TABLE,GRANT ALL等权限操作2、慢查询日志执行时间异常无索引的查询为抛暴力破解)

3、网络流量异常(结合系统日志,如:/var/log/auth.log,同一ip的多次连接失败,或二进制日志中的异常的数据库修改操作)

三、安全建议

定期审计:定期检查日志文件,关注高频错误或敏感操作。

限制访问:通过GRANT语句最小化用户权限,


日志轮转:配置logrotate防止防止日志文件过大,同时保留历史,

使用logrotate实现自动化轮转

安装logrotate‌

sudo apt install logrotate # Ubuntu/Debian

sudo yum install logrotate # CentOS/RHEL

配置轮转规则‌

创建/etc/logrotate.d/mysql文件,内容示例:

conf

/var/log/mysql/*.log {

daily

rotate 7

compress

missingok

notifempty

create 640 mysql mysql

postrotate

/usr/bin/mysqladmin flush-logs || true

endscript

}

daily:每天轮转一次

rotate 7:保留7份历史日志

postrotate:通知MySQL刷新日志文件‌。

手动触发测试‌

bash

Copy Code

logrotate -vf /etc/logrotate.d/mysql

三、优化建议

日志存储分离‌:将日志目录挂载到独立磁盘,避免与数据目录争抢I/O‌。

定期清理‌:结合find命令删除过期日志,或设置监控脚本报警‌。

安全合规‌:根据等保要求保留日志至少180天,并配置自动备份‌。


四、异常登录关键词

一、异常登录检测关键词

‌失败登录尝试‌

Failed password:SSH或MySQL登录失败记录

Access denied:数据库权限拒绝

Invalid user:无效用户名尝试

‌高频登录行为‌

同一IP短时间内多次登录失败(如/var/log/auth.log中统计)

非常规时间段的登录(如凌晨2-5点)

二、SQL注入攻击关键词

‌SQL语法特征‌

UNION SELECT:联合查询注入

CONCAT(:字符串拼接注入

information_schema:数据库结构探测

--或#:注释符绕过验证

‌攻击工具特征‌

waitfor delay:时间盲注攻击

xp_cmdshell:执行系统命令(SQL Server)

1=1或1=2:布尔逻辑测试

三、日志文件路径

‌MySQL错误日志‌:/var/log/mysql/error.log

‌系统认证日志‌:/var/log/auth.log(Ubuntu)或/var/log/secure(CentOS)

四、检测命令示例

‌暴力破解检测‌

bash

grep "Failed password" /var/log/auth.log | awk '{print $11}' | sort | uniq -c | sort -nr

‌SQL注入检测‌

bash

grep -E "UNION.*SELECT|information_schema" /var/log/nginx/access.log

五、 MySQL日志分析命令清单(一键复制执行)

一、暴力破解检测

提取失败登录IP并排序‌

bash

MySQL错误日志分析(Ubuntu/CentOS通用)

sudo grep -i "access denied" /var/log/mysql/error.log | awk '{print $NF}' | cut -d ' ' -f1 | sort | uniq -c | sort -nr | head -n 20

系统认证日志分析(SSH/MySQL混合检测)‌

bash

Ubuntu/Debian系统

sudo grep "Failed password" /var/log/auth.log | awk '{print $(NF-1)}' | sort | uniq -c | sort -nr | head -n 15

CentOS/RHEL系统

sudo grep "Failed password" /var/log/secure | awk '{print $(NF-1)}' | sort | uniq -c | sort -nr | head -n 15

二、SQL注入检测

通用查询日志分析‌

bash

检测UNION注入和系统表查询

sudo grep -E "UNION.*SELECT|information_schema|mysql.user" /var/log/mysql/mysql.log

检测时间盲注特征

sudo grep -i "waitfor delay" /var/log/mysql/mysql.log

慢查询日志分析(异常长查询)‌

bash

找出执行时间超过5秒的查询(需先设置long_query_time=5)

sudo awk '$2 > 5 {print}' /var/log/mysql/slow-query.log

三、自动化分析脚本

暴力破解实时监控‌

bash

监控MySQL错误日志中的暴力破解行为

tail -f /var/log/mysql/error.log | grep -i "access denied" | awk '{print $NF}' | cut -d ' ' -f1 | while read ip; do

echo "[(date)\] IP ip 尝试暴力破解MySQL" | tee -a /var/log/mysql/brute_force.log

done

SQL注入特征扫描‌

bash

扫描最近1小时的MySQL日志

sudo find /var/log/mysql -name "*.log" -mtime -1 | xargs grep -E "UNION.*SELECT|information_schema|mysql.user"

四、防护建议

立即封禁可疑IP‌

bash

封禁暴力破解IP(示例)

sudo iptables -A INPUT -s 192.168.1.100 -j DROP

日志加固配置‌

ini

/etc/mysql/my.cnf 配置示例

mysqld

log_error = /var/log/mysql/error.log

general_log = 1

general_log_file = /var/log/mysql/general.log

slow_query_log = 1

slow_query_log_file = /var/log/mysql/slow-query.log

使用说明‌

将命令粘贴到终端执行,需sudo权限

建议定期执行(如crontab每日任务)

发现攻击后立即检查/var/log/mysql/目录下的原始日志

结合防火墙规则和MySQL权限控制进行深度防护

相关推荐
爱可生开源社区1 小时前
SQLShift V5.0 发布!引入增强模型:复杂 SQL 转换准确率质变
数据库·sql
CC.GG1 小时前
【C++】面向对象三大特性之一——继承
java·数据库·c++
郑州光合科技余经理1 小时前
技术架构:跑腿配送系统海外版源码全解析
java·开发语言·前端·数据库·架构·uni-app·php
爱可生开源社区1 小时前
SCALE | 2025 年 11 月《大模型 SQL 能力排行榜》发布
数据库·sql·llm
计算机学长felix1 小时前
基于SpringBoot的“某学院教室资产管理系统”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端
周杰伦_Jay1 小时前
【MySQL】核心特性+实操教程(含SQL命令+表格对比+优化技巧)
sql·mysql
小园子的小菜1 小时前
Redis序列化生产实践:从选型到落地的案例指南
数据库·redis·缓存
o***11141 小时前
PostgreSQL的备份方式
数据库·postgresql
盼哥PyAI实验室2 小时前
【超详细教程】Python 连接 MySQL 全流程实战
python·mysql·oracle