MySQL审计之init-connect + binlog
来源:互联网 发布:java业余培训 编辑:程序博客网 时间:2024/05/01 14:20
init-connect是配置文件的一个参数,作用是在每个客户端连接时执行,我们需要有一个表来保存连接客户端的ID,IP和登录时间,ID是连接的session的ID号,是递增的。那么,当我们在binlog查出操作的SQL,并找到该记录的thread_id,然后将thread_id带入我们新建的表,根据ID来查出修改者的IP和时间。
1、创建用于存放连接信息的表
mysql> create database AuditDB default charset utf8;mysql> use AuditDB;mysql> create table accesslog ( ID int primary key auto_increment, ConnectionID int, ConnUser varchar(30), MatchUser varchar(30), LoginTime datetime);
2、保证所有链接用户对此表有写入权限
mysql> insert into mysql.db (Host,Db,User,Insert_priv) values ('%','AuditDB','','Y');Query OK, 1 row affected (0.03 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)
3、设置init-connect
在[mysqld]下添加以下设置:#设置初始化连接操作init-connect='Insert into AuditDB.accesslog(ConnectionID, ConnUser, MatchUser, LoginTime) values(connection_id(),user(),current_user(),now());'#开启binloglog-bin=xxx
4、重启数据库生效
shell> /etc/init.d/mysql restart连接测试查询mysql> select * from AuditDB.accesslog;+----+--------------+--------------------+-----------------+---------------------+| ID | ConnectionID | ConnUser | MatchUser | LoginTime |+----+--------------+--------------------+-----------------+---------------------+| 1 | 1 | svoid@localhost | svoid@localhost | 2015-04-24 14:16:18 || 2 | 3 | svoid@192.168.56.1 | svoid@% | 2015-04-24 14:16:53 |+----+--------------+--------------------+-----------------+---------------------+2 rows in set (0.00 sec)
查找操作记录
1、 进行模拟操作,下列操作可由多个连接进行
mysql> use test;Database changedmysql> create table t (id int ,name varchar(20));Query OK, 0 rows affected (0.06 sec)mysql> insert into t values(1,'a');Query OK, 1 row affected (0.16 sec)mysql> insert into t values(2,'b');Query OK, 1 row affected (0.03 sec)mysql> truncate table t ;Query OK, 0 rows affected (0.03 sec)
2、根据binlog,确认操作truncate的thread_id
mysqlbinlog --start-datetime='2015-04-24 14:10:00' --stop-datetime='2015-04-24 14:25:00' /db/mysql/data/mysql_info.000007 | grep -B 5 truncate# at 1223#150424 14:23:36 server id 1 end_log_pos 1302 Query thread_id=3 exec_time=0 error_code=0SET TIMESTAMP=1429856616/*!*/;/*!\C gbk *//*!*/;SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=33/*!*/;truncate table t
根据上面的提示可以看到操作的thread_id=3
3、确认操作的用户
mysql> select * from AuditDB.accesslog where ConnectionID=3;+----+--------------+--------------------+-----------+---------------------+| ID | ConnectionID | ConnUser | MatchUser | LoginTime |+----+--------------+--------------------+-----------+---------------------+| 2 | 3 | svoid@192.168.56.1 | svoid@% | 2015-04-24 14:16:53 |+----+--------------+--------------------+-----------+---------------------+1 row in set (0.00 sec)
注意:
- init-connect 是不会在super用户登录时执行, 所以不要使用超级用户,不然你看不到任何信息。
- 理论上,用户每次连接时往数据库里插入一条记录,不会对数据库产生很大影响,考虑降低连接频率及accesslog插入效率优化。
- 对于所有的普通级别的用户,必须全部都要对日志表具有读写权限, 否则将导致,没有权限的用户无法使用数据库。
- 建议把记录表的引擎设置为archive,能极大的缩小空间。
0 0
- MySQL审计之init-connect + binlog
- mysql init-connect + binlog的方法进行mysql的审计
- 通过init-connect + binlog 实现MySQL审计功能
- mysql利用init-connect增加访问审计功能
- 在MySQL中使用init-connect与binlog来实现用户操作追踪记录
- mysql 用init-connect+binlog实现用户操作追踪 做access 的ip的log 记录
- 在MySQL中使用init-connect与binlog来实现用户操作追踪记录
- MySQL审计之插件
- MySQL 日志之binlog日志
- mysql binlog 系列课程之(一)---mysql binlog 用途
- mysql binlog 系列课程之(二)---mysql 如何启用binlog
- mysql binlog 系列课程之(三)---mysql 查看binlog
- mysql binlog 系列课程之(四)---mysql binlog 删除
- MySQL触发器之审计功能
- MySQL审计之General log
- mysql之 binlog维护详细解析(开启、binlog相关参数作用、mysqlbinlog解读、binlog删除)
- Mysql之binlog日志恢复操作记录
- MySQL binlog
- MySQL慢查询分析mysqldumpslow
- 海量数据去重排序--bitmap(位图法)在java中的实现的两种方法
- Linux环境下部署完JDK后运行一个简单的Java程序
- HDU-4588 Count The Carries (模拟)
- java 使用 comet4j 主动向客户端推送信息 简单例子
- MySQL审计之init-connect + binlog
- OpenCV_连通区域分析(Connected Component Analysis/Labeling)
- 100道C#面试题(.net开发人员必备)
- 编写代码期间遇到的问题
- ES6-Iterator与for..of..遍历
- Android5.1--电源管理之省电模式分析
- spring 加载xml
- redis数据库--操作对象
- UITextView改变选中字的颜色