MySQL5.7 (审计)通过init_connect + binlog 实现MySQL审计功能
转载自:https://blog.51cto.com/13941177/2173620
一、简介
1、概述
mysql本身已经提供了详细的sql执行记录–general log ,但是开启它有以下几个缺点:
1)无论sql有无语法错误,只要执行了就会记录,导致记录大量无用信息,后期的筛选有难度。
2)sql并发量很大时,log的记录会对io造成一定的印象,是数据库效率降低。
3)日志文件很容易快速膨胀,不妥善处理会对磁盘空间造成一定影响。
2、原理
1) 由于审计的关键在于DML语句,而所有的DML语句都可以通过binlog记录。
2)不过遗憾的是目前MySQL binlog 中只记录,产生这条记录的connection id(随连接数自增,循环使用),这对之后的反查没有任何帮助。
3)因此考虑通过init-connect,在每次连接的初始化阶段,记录下这个连接的用户,和connection_id信息。
4)在后期审计进行行为追踪时,根据binlog记录的行为及对应的connection-id 结合 之前连接日志记录 进行分析,得出最后的结论。
备注:根据自己的实际环境使用审计方式,切记谨慎使用。
3、相对于audit审计插件
缺点:只对有低级权限的用户的操作有记录,权限高的则没有 。
优点:日志信息比较小,对性能影响小
二、安装审计功能
1、创建审计用的库表。
mysql> create database db_monitor charset utf8;
mysql> use db_monitor
CREATE TABLE accesslog
( thread_id int(11) DEFAULT NULL, #进程id
log_time datetime default null, #登录时间
localname varchar(50) DEFAULT NULL, #登录名称,带详细ip
matchname varchar(50) DEFAULT NULL, #登录用户
key idx_log_time(log_time)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
2、配置init-connect参数
# vim /etc/my.cnf
[mysqld]
server-id = 130
federated
log-bin = mysql-bin
binlog_format = mixed
init_connect='insert into db_monitor.accesslog(thread_id,log_time,localname,matchname) values(connection_id(),now(),user(),current_user());'
3、删除默认用户:
mysql> delete from user where Host='localhost' and User='';
4、创建普通用户,不能有super权限,而且用户必须有对access_log库的access_log表的insert权限,否则会登录失败。
mysql> GRANT CREATE,DROP,ALTER,INSERT,DELETE,UPDATE,SELECT ON *.* TO audi01@'%' IDENTIFIED BY '147258';
mysql> flush privileges;
5、赋予用户access_log的insert、select权限,然后重新赋予权限:
mysql> GRANT SELECT,INSERT ON db_monitor.* TO audi01@'%';
mysql> flush privileges;
6、查看,使用audi01用户登录查看
mysql> select * from accesslog;
mysql> delete from accesslog where thread_id=10;

通过mysqlbinlog查看
# /usr/bin/mysqlbinlog /var/lib/mysql/mysql-bin.000013

扩展说明:
1)init-connect只会在连接时执行,不会对数据库产生大的性能影响
2)init-connect是在连接时执行的动作命令,故可以用它来完成其它的功能,如:init_connect='SET autocommit=0'
3)init-connect不会记录拥有super权限的用户记录,为了防止init_connect语句由于语法错误或权限问题而所有用户都登陆不了的情况,保证至少super用户能登陆并修改此值。
4)于是一个log库,推荐使用archive存储引擎,有利于数据厄压缩存放。如果数据库连接数量很大的话,建议一定时间做一次数据导出,然后清表。
MySQL5.7 (审计)通过init_connect + binlog 实现MySQL审计功能的更多相关文章
- 通过init-connect + binlog 实现MySQL审计功能
背景: 假设这么一个情况,你是某公司mysql-DBA,某日突然公司数据库中的所有被人为删了. 尽管有数据备份,但是因服务停止而造成的损失上千万,现在公司需要查出那个做删除操作的人. 但是拥有数据库操 ...
- mysql审计实现方法
Mysql版本: 5.6.24-72.2 一.通过init-connect + binlog 实现MySQL审计功能 基本原理: 由于审计的关键在于DML语句,而所有的DML语句都可以通过binlog ...
- MySQL审计工具Audit Plugin安装使用
本实验的审计插件均是安装在 mysql-community-server-5.7.9 的服务器上. 插件安装(社区版) 插件下载地址: https://bintray.com/mcafee/mysql ...
- 烂泥:通过binlog恢复mysql备份之前的数据
本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章,我们讲解了如何通过mysql的binlog日志恢复mysql数据库,文章连接为<烂泥:通过binlog恢复mysql数据库>.其 ...
- 开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法
开启bin-log日志mysql报错:This function has none of DETERMINISTIC, NO SQL解决办法: 创建存储过程时 出错信息: ERROR 1418 (HY ...
- Ubuntu下rsyslog集中收集mysql审计日志
服务端 1.安装最新版本rsyslog sudo apt-get install software-properties-common python-software-properties sudo ...
- 配置Mysql审计
mysql-audit.json:Mysql审计日志 插件下载地址: https://bintray.com/mcafee/mysql-audit-plugin/release/1.1.4-725#f ...
- mysql审计插件-记录所有sql语句
https://www.58jb.com/html/160.html https://www.jianshu.com/p/a0e0aec3cb6f MySQL审计工具Audit Plugin安装使用 ...
- 解析binlog生成MySQL回滚脚本
如果数据库误操作想恢复数据.可以试试下面这个脚本.前提是执行DML操作. #!/bin/env python #coding:utf-8 #Author: Hogan #Descript : 解析bi ...
随机推荐
- nginx设置导航&安装showdoc&创建文件服务&zabbix&grafana
安装环境: [root@nginx showdoc]# cat /etc/centos-release #系统版本 CentOS Linux release 7.5.1804 (Core) [root ...
- xv6解析-- 多处理器操作
xv6可以运行多cpu的计算机上,这个os使用mycpu函数来标识初当前的cpu,使用struct cpu结构体来记录当前的CPU状态.使用cpus这些状态存放于cpus数组中,使用ncpu来标志cp ...
- 串口(USART)通信-串口通讯协议简介
物理层:规定通讯系统中具有机械.电子功能部分的特性,确保原始数据在物理媒体的传输.其实就是硬件部分. 协议层:协议层主要规定通讯逻辑,统一收发双方的数据打包.解包标准.其实就是软件部分. 简单来说物理 ...
- 涛哥:Qt安卓-5.12环境搭建
简介 Qt for android 环境搭建,以Windows平台 Qt5.12为基准. 因为有不少人问相关问题,所以写篇文章汇总一下. 安装Qt 需要先安装Android版的Qt. 一般在Qt的安装 ...
- Codefroces 1245 F. Daniel and Spring Cleaning
传送门 考虑简单的容斥 设 $F(n,m)$ 表示 $a \in [1,n] , b \in [1,m]$ 的满足 $a+b=a \text{ xor } b$ 的数对的数量 那么答案即为 $F(r, ...
- pymongo基础使用方法
本文通过文章同步功能推送至博客园,排版可能会有所错误,敬请见谅! 1.客户端初始化 初始化MongoDB客户端 client = pymongo.MongoClient('localhost',270 ...
- (十二) web服务与javaweb结合(3)
一.需求 上一章节虽然将webservice和web项目绑定在了一起,但是还是不能共同一个端口,本章讲解webservice和web项目绑定且共同端口. 二.案例 2.1 创建web工程,并引入依赖 ...
- ActivityMQ消息中间件【待完成】
1,MQ的引入 使用场景,将耗时的通知业务交给消息中间件[业务逻辑进行解耦] 使用消息中间件的逻辑交互 2,MQ的应用场景 首先消息中间件是一个异步处理 有两个关键点:①耗时:②业务的耦合度 案例1: ...
- T4模板使用笔记
路径获取 ① 获取当前解决方案路径 string solutionsPath = Host.ResolveAssemblyReference("$(SolutionDir)"); ...
- opencv-01--图像的遍历
遍历图像的4种方式 一.at<typename>(i,j) Mat类提供了一个at的方法用于取得图像上的点,它是一个模板函数,可以取到任何类型的图像上的点.下面我们通过一个图像处理中的实际 ...