下面小編就為大家?guī)硪黄?a >mysql利用init-connect增加訪問審計功能的實現(xiàn)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
mysql的連接首先都是要通過init-connect初始化,然后連接到實例。
我們利用這一點,通過在init-connect的時候記錄下用戶的thread_id,用戶名和用戶地址實現(xiàn)db的訪問審計功能。
實現(xiàn)步驟
1、創(chuàng)建審計用的庫表。
為了不與業(yè)務的庫沖突,單獨創(chuàng)建自己的庫:
#建庫表代碼 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參數(shù)
這個參數(shù)是可以動態(tài)調(diào)整的,也注意要加到配置文件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權(quán)限
該點很重要
該參數(shù)只對普通用戶生效,有super權(quán)限的都不會有作用。
如果是普通用戶,增加了該功能后,一定需要授權(quán):
grant insert on db_monitor.accesslog to user@’xx.xx.xx.%’;
不授權(quán)的后果是,連接數(shù)據(jù)庫會失敗:
accesslog表沒有insert權(quán)限的用戶:
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:
可以看出來是哪個用戶進行了操作,從而完成審計。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END