mysql实现访问审计

mysql的链接首先都是经过init_connect初始化,而后链接到实例。mysql

咱们利用这一点,经过在init_connect的时候记录下用户的thread_id,用户名和用户地址实现db的访问审计功能。sql

  • 首先咱们先建立审计用的库表

  为了避免与业务的库冲突,单首创建本身的库:线程

  create database db_monitor;日志

  use db_monitor;索引

  create table monitor (ip

    thread_id int(11) default null,      #线程idit

    log_time  datetime  default null,  #登陆时间io

    localname  varchar(64)  default null,     #登陆名称,带详细iptable

    login_user  varchar(32)  default null,     #登陆用户thread

    key  idx_log_time(log_time)                   #创建索引字段

  )engine=InnoDB  default charset=utf8;

 

  •   执行init_connect须要的sql

  这个参数是能够动态调整的,也注意要加到配置文件my.cnf中,不然下次重启就失效了;

  mysql>  show variables like 'init_connect%';

       mysql> init_connect='insert into db_monitor.monitor(thread_id,log_time,localname,login_user) values(connection_id(),now(),user(),current_user());'

 

  •   授予普通用户对monitor表的insert权限

  该点很重要

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

  若是是普通用户,增长了该功能后,必定要受权:

  grant insert on db_monitor.monitor to user@'%';

  •   验证审计功能

  经过binlog日志查看分析

相关文章
相关标签/搜索