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日誌查看分析