转载自: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审计功能的更多相关文章

  1. 通过init-connect + binlog 实现MySQL审计功能

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

  2. mysql审计实现方法

    Mysql版本: 5.6.24-72.2 一.通过init-connect + binlog 实现MySQL审计功能 基本原理: 由于审计的关键在于DML语句,而所有的DML语句都可以通过binlog ...

  3. MySQL审计工具Audit Plugin安装使用

    本实验的审计插件均是安装在 mysql-community-server-5.7.9 的服务器上. 插件安装(社区版) 插件下载地址: https://bintray.com/mcafee/mysql ...

  4. 烂泥:通过binlog恢复mysql备份之前的数据

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 上一篇文章,我们讲解了如何通过mysql的binlog日志恢复mysql数据库,文章连接为<烂泥:通过binlog恢复mysql数据库>.其 ...

  5. 开启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 ...

  6. Ubuntu下rsyslog集中收集mysql审计日志

    服务端 1.安装最新版本rsyslog sudo apt-get install software-properties-common python-software-properties sudo ...

  7. 配置Mysql审计

    mysql-audit.json:Mysql审计日志 插件下载地址: https://bintray.com/mcafee/mysql-audit-plugin/release/1.1.4-725#f ...

  8. mysql审计插件-记录所有sql语句

    https://www.58jb.com/html/160.html https://www.jianshu.com/p/a0e0aec3cb6f MySQL审计工具Audit Plugin安装使用 ...

  9. 解析binlog生成MySQL回滚脚本

    如果数据库误操作想恢复数据.可以试试下面这个脚本.前提是执行DML操作. #!/bin/env python #coding:utf-8 #Author: Hogan #Descript : 解析bi ...

随机推荐

  1. Python笔记002-Python编程基础概念

    第二章(1):Python编程基础概念 1. Python 程序的构成 Python 程序有模块组成.一个模块对应 Python 源文件,一般后缀名是:.py. 模块有语句组成.运行 Python程序 ...

  2. WUSTOJ 1208: 计算整数四则运算表达式的结果(Java)

    1208: 计算整数四则运算表达式的结果 参考资料 数据结构(C语言版)严蔚敏 吴伟民 编著----表达式求值 题目   简单四则运算.更多内容点击标题. 保证表达式合法. 运算符只包含:加(+),减 ...

  3. S03_CH12_基于UDP的QSPI Flash bin文件网络烧写

    S03_CH12_基于UDP的QSPI Flash bin文件网络烧写 12.1概述 为了满足不同的需求,本例程在"基于TCP的QSPI Flash bin文件网络烧写"上进行修改 ...

  4. prometheus+grafana监控mysql

    prometheus+grafana监控mysql 1.安装配置MySQL官方的 Yum Repository(有mysql只需设置监控账号即可) [root@localhost ~]# wget - ...

  5. Java 面向对象_继承

    继承 在继承的关系中,子类就是一个父类,也就是说,子类可以被当做父类看待,例如:父类是员工,子类是程序员,那么程序员就是一个员工,代码示例: // 员工类 public class Employee{ ...

  6. 媲美pandas的数据分析工具包Datatable

    1 前言 data.table 是 R 中一个非常通用和高性能的包,使用简单.方便而且速度快,在 R 语言社区非常受欢迎,每个月的下载量超过 40 万,有近 650 个 CRAN 和 Biocondu ...

  7. java jdk1.8 API

    里面有 中英文 jdk 1.8 API    还有 jdk1.6 和1.7 英文 API 链接:https://pan.baidu.com/s/1tchABVX7htJCaO3quENP1g提取码:y ...

  8. 【Day4】5.Request对象之Http Post请求案例分析

    import urllib.parse as up import urllib.request as ur import json word = input('请输入要翻译的中文') data = { ...

  9. linux 基础12-程序与资源管理

    1. 基础概念 可执行的二进制文件就是程序 执行程序的时候因触发事件而获取的ID,称为PID 在登入并执行bash时,系统依据登录者的UID/GID给登录者一个PID/GPID/SID等 启动程序时, ...

  10. PHP获取当前页面地址

    #测试网址:     http://localhost/blog/testurl.php?id=5   //获取域名或主机地址 echo $_SERVER['HTTP_HOST']."< ...