首页 / 数据库 / MySQL / 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.81Enter 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 |admin@10.45.247.160 | admin@% || 10 | 2014-09-24 17:26:18 | pxy@10.45.247.160 | pxy@% || 11 | 2014-09-24 17:28:13 |pxy@10.45.247.160 | 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=1122:#140924 17:28:13 server id 114 end_log_pos 282 Query thread_id=11 exec_time=0 error_code=024: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 的操作。--------------------------------------分割线 --------------------------------------Ubuntu 14.04下安装MySQL http://www.linuxidc.com/Linux/2014-05/102366.htm《MySQL权威指南(原书第2版)》清晰中文扫描版 PDF http://www.linuxidc.com/Linux/2014-03/98821.htmUbuntu 14.04 LTS 安装 LNMP NginxPHP5 (PHP-FPM)MySQL http://www.linuxidc.com/Linux/2014-05/102351.htmUbuntu 14.04下搭建MySQL主从服务器 http://www.linuxidc.com/Linux/2014-05/101599.htmUbuntu 12.04 LTS 构建高可用分布式 MySQL 集群 http://www.linuxidc.com/Linux/2013-11/93019.htmUbuntu 12.04下源代码安装MySQL5.6以及Python-MySQLdb http://www.linuxidc.com/Linux/2013-08/89270.htmMySQL-5.5.38通用二进制安装 http://www.linuxidc.com/Linux/2014-07/104509.htm--------------------------------------分割线 --------------------------------------本文永久更新链接地址