mysql的连接首先都是要通过init-connect初始化,然后连接到实例。

我们利用这一点,通过在init-connect的时候记录下用户的thread_id,用户名和用户地址实现db的访问审计功能。

实现步骤

1、创建审计用的库表。

为了不与业务的库冲突,单独创建自己的库:

#建库表代码
create database db_monitor ;
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参数

这个参数是可以动态调整的,也注意要加到配置文件my.cnf中,否则下次重启后就失效了;

mysql> show variables like 'init_connect%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| init_connect  |       |
+---------------+-------+
1 row in set (0.00 sec

mysql> set global init_connect='insert into
db_monitor.accesslog(thread_id,log_time,localname,matchname)
values(connection_id(),now(),user(),current_user());';

3、授予普通用户对accesslog表的insert权限

该点很重要

该参数只对普通用户生效,有super权限的都不会有作用。

如果是普通用户,增加了该功能后,一定需要授权:

grant insert on db_monitor.accesslog to user@'xx.xx.xx.%';

不授权的后果是,连接数据库会失败:

accesslog表没有insert权限的用户:

mysql> show databases;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    7
Current database: *** NONE ***

ERROR 1184 (08S01): Aborted connection 7 to db: 'unconnected' user: 'user2' host: 'localhost' (init_connect command failed)

4、验证审计功能

某个用户对test库删除了一张表,看我们配合binlog日志是否能追踪到时哪个用户:

查看binlog:

可以看出来是哪个用户进行了操作,从而完成审计。

转自:http://blog.csdn.net/wlzjsj/article/details/52415378

最新文章

  1. 【原】iOS学习之在NSObject子类中获取当前屏幕显示的ViewController
  2. Chronos
  3. #ifdef __cplusplus extern "C" { #endif //一段代码 #ifdef __cplusplus } #endif
  4. 每日目标——HTML 头部标签学习 2015-8-27
  5. codevs 1206 保留两位小数
  6. Qt之QLineEdit
  7. Springmvc构造RESTful详细讲解
  8. 360的IM可能会是什么样?
  9. 自定义TextView跑马灯
  10. SQL SERVER的单用户模式以及专用管理员连接
  11. display显示方式
  12. js中prototype,constructor的理解
  13. 4.3Python数据类型(3)之字符串类型
  14. passwd 修改密码
  15. 修改php.ini 的timezone
  16. Python -- 网络编程 -- 抓取网页图片 -- 豆瓣妹子
  17. 查看本机的ip
  18. 常见的Javascript报错及解决方案
  19. 处理unsigned相减错误(BIGINT UNSIGNED value is out of range)
  20. @Query 注解实现查询(二十四)

热门文章

  1. win10下iis绑定局域网ip无效的解决方案
  2. C# t4模版引擎笔记 引入外部dll
  3. Silverlight:telerik RadControls中RadGridView的一个Bug及解决办法(转载)
  4. Spring 使用
  5. 219. Contains Duplicate II【easy】
  6. CentOS sendmail安装及邮件域名配置
  7. C#中基本类型占用字节数
  8. WebAssembly,Web的新时代
  9. IOS设计模式浅析之桥接模式(Bridge)
  10. plsql programming 13 其他数据类型