MySQL 對普通用戶(沒有super)開啓審計功能

最近有發現有壞蛋delete 了數據,找不到是哪個user 哪個host,發現mysql 是可以對沒有super 權限的用戶開啓審計功能,oracle早就實現了,只需要打開參數即可。

1.在my.cnf [mysqld]組下加入

init-connect='insert intoaduit.accesslog(id,time,localname,matchname)values(connection_id(),now(),user(),current_user());

 

#create database accesslog;

CREATE TABLE aduit.accesslog (`id` int(11) primary keyauto_increment, `time` timestamp, `localname` varchar(30), `matchname`varchar(30))engine=innodb;

2.被審計的用戶需要有insert aduit.accesslog 權限

grant insert on aduit.accesslog to hhl@'172.17.62.%' identified by'xxx';

3.只能審計普通用戶沒有super權限的用戶的DDL,DML,還用開啓binlog 分析。

 

[root@wy ~]# mysql -upxy -p -P3306 -h 10.45.247.81

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

mysql> insert into test.t10 values(10);

Query OK, 1 row affected (0.00 sec)

#上面client 連接Processid = 11

mysql> select * from aduit.accesslog;

+----+---------------------+---------------------+-----------+

| id | time                |localname           | matchname |

+----+---------------------+---------------------+-----------+

|  3 | 2014-09-24 17:16:06 |[email protected] | admin@%   |

| 10 | 2014-09-24 17:26:18 | [email protected]   | pxy@%    |

| 11 | 2014-09-24 17:28:13 |[email protected]   | pxy@%     |

+----+---------------------+---------------------+-----------+

Processid = 11

mysql> show processlist;

+----+-----------------+---------------------+------+---------+------+------------------------+------------------+

| Id | User            | Host                | db   | Command | Time | State                  | Info             |

+----+-----------------+---------------------+------+---------+------+------------------------+------------------+

|  2 | root            | localhost           | NULL | Query   |    0| NULL                   | showprocesslist |

| 11 | pxy             | 10.45.247.160:53086 | NULL |Sleep   |   26 |                        | NULL             |

+----+-----------------+---------------------+------+---------+------+------------------------+------------------+

看到了id=11的吧,就是aduit.accesslog 表的id列。

通過解析 binlog

[root@localhost binlog]# mysqlbinlog --base64-output=decode-rows -v-v mysql-bin.000030 |grep  -nthread_id=11

22:#140924 17:28:13 server id 114 end_log_pos 282  Query   thread_id=11    exec_time=0 error_code=0

24:SET @@session.pseudo_thread_id=11/*!*/;

42:#140924 17:32:21 server id 114 end_log_pos 491  Query   thread_id=11    exec_time=0 error_code=0

定位到模糊的行位置,再找到binlog中Processid = 11 的操作。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章