记一次mysql数据被恶意篡改的恢复
客户员工与客户公司产生了矛盾离职,离职的时候系统账号权限还未收回,此员工使用账号登录系统之后恶意篡改用户数据被发现。
系统本身做了mysql主从同步,但是因为是恶意篡改数据,对于程序和数据库而言其属于合理的操作范围,主从同步也会正常同步
目前系统有日志记录功能,不过日志记录只记录了用户修改时传入的参数,并未记录修改前的数据库记录(此处后续已加强,关键数据操作时日志要记录修改前的)
重要提示:上述行为是违法的,触发刑事责任,这个员工可能是个法盲,后续估计面临6个月以上的刑期。我看刑,有判头
因为知道mysql有binlog,因此第一时间去服务器查看binlog文件,还好还没过期(系统设置的binlog保留天数是最近7天),下面开始数据提取之路:
第一步复制出来相应日期的binlog文件到某个单独目录(也可以在binlog目录操作,不过不建议那样做)
cp mysql-bin.000078 /data/backup
第二步将binlog内容转为肉眼可见的SQL命令文件
因为之前我们设置的binlog记录模式是mixed,mixed模式是row模式和statement模式的混合体,所以提取的时候需要对命令做一个加强,提取binlog内容使用的是mysql自带的 mysqlbinlog命令
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS --start-datetime='2022-09-16 10:20:00' -v mysql-bin.000078 > sql78_tmp.log
参数说明:
- --no-defaults 按照默认编码
- --base64-output=DECODE-ROWS 显示row模式的sql文,不加这个提取的sql文不完整
- --start-datetime 从某个时间段开始进行提取,当然也可以指定一个区间范围,可以增加--end-datetime
- -v 显示statement模式的sql文
-
将解析的内容输出到后续的文件中
执行完毕之后查看sql78_tmp.log即可看到解析之后的信息,然后根据关键字去搜索对应sql文执行记录即可。
分类:
mysql
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)