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;
这个参数是能够动态调整的,也注意要加到配置文件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());'
该点很重要
该参数只对普通用户生效,有super权限的都不会有做用。
若是是普通用户,增长了该功能后,必定要受权:
grant insert on db_monitor.monitor to user@'%';
经过binlog日志查看分析