假设这么一个情况,你是某公司mysql-DBA,某日突然公司 数据库 中的所有被人为删了。
尽管有数据备份,但是因服务停止而造成的损失上千万,现在公司需要查出那个做删除操作的人。
但是拥有数据库操作权限的人很多,如何排查,证据又在哪?
是不是觉得无能为力?
mysql 本身并没有操作审计的功能,那是不是意味着遇到这种情况只能自认倒霉呢?
本文就将讨论一种简单易行的,用于mysql访问审计的思路。
 
概述:
其实mysql本身已经提供了详细的sql执行记录–general log ,但是开启它有以下几个缺点
无论sql有无语法错误,只要执行了就会记录,导致记录大量无用信息,后期的筛选有难度。
sql并发量很大时,log的记录会对io造成一定的印象,是数据库效率降低。
日志文件很容易快速膨胀,不妥善处理会对磁盘空间造成一定影响。
本文观点:
使用init-connect + binlog的方法进行mysql的操作审计。
由于mysql binlog记录了所有对数据库长生实际修改的sql语句,及其执行时间,和connection_id但是却没有记录connection_id对应的详细用户信息。
因此本文将通过init-connect,在每次连接的初始化阶段,记录下这个连接的用户,和connection_id信息。
在后期审计进行行为追踪时,根据binlog记录的行为及对应的connection-id 结合 之前连接日志记录 进行分析,得出最后的结论。
 
 
正文:
1. 设置init-connect
1.1 创建用于存放连接日志的数据库和表
create database accesslog;
CREATE TABLE accesslog.accesslog (`id` int(11) primary key auto_increment, `time` timestamp, `localname` varchar(30), `matchname` varchar(30))
1.2 创建用户权限
可用现成的root用户用于信息的读取
grant read on accesslog.* to root@localhost identified by ‘password’;
如果存在具有to *.* 权限的用户需要进行限制。
1.3 设置init-connect
在[mysqld]下添加以下设置:
init-connect=’insert into accesslog.accesslog values(connection_id(),user(),current_user(),now());’
log-bin
1.4 重启数据库生效
shell> service mysqld restart
 
2. 记录追踪
2.1 thread_id确认
假设想知道在2009年11月25日,上午9点多的时候,是谁吧test.dummy这个表给删了。可以用以下语句定位
mysqlbinlog –start-datetime=’2009-11-25 09:00:00′ –stop-datetime=’2009-11-25 09:00:00′  binlog.xxxx | grep ‘dummy’ -B 5
会得到如下结果(可见thread_id为5):
# at 300777
#091124 16:54:00 server id 10  end_log_pos 301396       Query   thread_id=5     exec_time=0     error_code=0
SET TIMESTAMP=1259052840;
drop table test.dummy;
2.2 用户确认
thread_id 确认以后,找到元凶就只是一条sql语句的问题了。
select * from accesslog.accesslog where conn_id=5 ;
就能发现是testuser2@localhost干的了。
 
+——+——————————-+——————————-+—————————–+
| id   | time                        | localname              | matchname          |
+——+——————————-+——————————-+—————————–+
|   5  | 2009-11-25 10:57:39 | testuser2@localhost | testuser2@%        |
+——+——————————-+——————————-+—————————–+
 
3. Q&A
Q:使用init-connect会影响服务器性能吗?
A:理论上,只会在用户每次连接时往数据库里插入一条记录,不会对数据库产生很大影响。除非连接频率非常高(当然,这个时候需要注意的就是如何进行连接复用和控制,而非是不是要用这种方法的问题了)
Q:access-log表如何维护?
A: 由于是一个log 系统 ,推荐使用archive存储引擎,有利于数据厄压缩存放。如果数据库连接数量很大的话,建议一定时间做一次数据导出,然后清表。
Q:表有其他用途么?
A:有!access-log表当然不只用于审计,当然也可以用于对于数据库连接的情况进行数据分析,例如每日连接数分布图等等,只有想不到没有做不到。
 
Q:会有遗漏的记录吗?
A:会的,init-connect 是不会在super用户登录时执行的。所以access-log里不会有数据库超级用户的记录,这也是为什么我们不主张多个超级用户,并且多人使用的原因。

查看mysql访问记录相关推荐

  1. 服务器如何查看 网站访问记录,如何查看服务器远程的访问记录

    如何查看服务器远程的访问记录 内容精选 换一换 当您想在Internet上通过域名访问您的网站时,可以通过本操作将域名托管至华为云的云解析服务,并为域名添加解析记录.例如,搭建一个网站服务器,采用IP ...

  2. linux查看用户访问记录,Linux记录登录用户的行为

    Linux 记录登录用户的行为 主要功能: 可以记录哪个ip和时间(精确到秒)作了哪些命令 通过用户登录时候,重新定义HISTFILE HISTFILE文件名包含登录用户名,ip,登录时间(精确到秒) ...

  3. 从路由器查看计算机访问记录,手机通过wifi连接路由上网,管理员能通过电脑终端看到浏览的内容或记录吗?...

    没有学习过电脑相关知识的人是做不到.正常在路由管理中只能看见某一个设备在无线网中使用了多长的时间,但是对于设备做了些什么登陆了哪些网址是看不到的. 但是对于学习过电脑知识,懂得相关操作的人,可以使用一 ...

  4. 怎么在mysql查看运行日志_如何查看mysql运行、访问记录等日志

    如何查看mysql运行.访问记录等日志 1.首先确认你日志是否启用了 mysql>show variables like 'log_bin'; mysql>show variables l ...

  5. mysql数据库访问记录_MySQL数据库运行、访问记录与日志

    以下的文章主要向大家介绍的是查看MySQL数据库运行.访问记录与日志的实际操作,我们大家都知道MySQL数据库运行.访问记录与日志的实际应用可以说很是广泛,以下的文章就是对这些内容的详细介绍. 1.首 ...

  6. MySql数据库记录相差14小时排错,使用Java访问Mysql数据库时出现时区异常的解决方案

    最近遇到1个大坑,A系统迁移到B系统,2边系统 同1个字段 createTime 看到的不一致. 表象: A系统: 2019-6-10 17:34 B系统: 2019-6-11 .... 再次尝试: ...

  7. 怎么打开/查看MySQL的SQL记录

    mysql在执行sql的时候会在日志当中记录很多信息,当然包括执行的所有语句.下面以使用navicat for mysql为例,来展示一下如何打开/查看MySQL的SQL记录: 打开navicat f ...

  8. Mysql访问日志记录

    Mysql访问日志记录 假设这么一个情况,你是某公司mysql-DBA,某日突然公司数据库中的所有被人为删了. 尽管有数据备份,但是因服务停止而造成的损失上千万,现在公司需要查出那个做删除操作的人. ...

  9. mysql数据库查看操作日志记录

    一.查看日志 show variables like 'log_bin' 二.查看数据库表的创建时间 SELECT CREATE_TIME FROM INFORMATION_SCHEMA.TABLES ...

最新文章

  1. 构件图(Component Diagram)
  2. [LeetCode] Binary Tree Postorder题解
  3. Redis操作List类型
  4. chart.js 饼图显示百分比_实战PyQt5: 135-数据可视化之QChart绘制饼图
  5. Linux 用户空间和内核空间
  6. python 默认配置文件_python各类配置文件写法
  7. 企业ERP选型的两难困惑
  8. codeforces 848B Rooter's Song 思维题
  9. Linux系统时间和java的时间不一致
  10. 深入了解如何学好C++编程
  11. ServiceManager学习框图
  12. transformClassesWithProfilers-transformForDebug
  13. Jsp 中 include 指令和 include 动作的区别
  14. Kettle(Pentaho Data Integration) 下载安装使用介绍/功能汇总
  15. sql 触发器(Insert,update,delete)
  16. 视音频数据处理入门:颜色空间(二)---ffmpeg
  17. 对Kindle进行可用性研究
  18. Centos下安装桌面环境和Flash插件
  19. MatlabR2014a安装工具包
  20. ALLOCATE语句分配FORTRAN动态数组方法

热门文章

  1. 电脑版微信聊天记录和小程序视频播放黑屏,但有声音,qq和其浏览器视频播放正常。如何解决?
  2. 【疑难杂症】The last packet sent successfully to the server was 0 milliseconds ago.
  3. 再度递表港交所,“快”能否成为绿茶餐厅突围的筹码?
  4. python中五个一行输出_python 如何将一系列数字十个一行输出
  5. Self-Attention与Transformer
  6. PV_Characteristic:基于MATLAB/Simulink的光伏特性程序
  7. 聊天机器人 AIML文件 srai标签解释(五)
  8. Android短信数据库相关
  9. 小白学爬虫---爬取中国房价工资比
  10. tcp/ip协议包含哪几层[转]