记一次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

参数说明:

  1. --no-defaults 按照默认编码
  2. --base64-output=DECODE-ROWS 显示row模式的sql文,不加这个提取的sql文不完整
  3. --start-datetime 从某个时间段开始进行提取,当然也可以指定一个区间范围,可以增加--end-datetime
  4. -v 显示statement模式的sql文
  5. 将解析的内容输出到后续的文件中

执行完毕之后查看sql78_tmp.log即可看到解析之后的信息,然后根据关键字去搜索对应sql文执行记录即可。

posted @ 2022-09-18 15:11  xuxianshun  阅读(312)  评论(0编辑  收藏  举报