分享mysql利用init-connect增加訪問審計功能的實例

下面小編就為大家?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日志是否能追蹤到時哪個用戶:

分享mysql利用init-connect增加訪問審計功能的實例

查看binlog:

分享mysql利用init-connect增加訪問審計功能的實例

可以看出來是哪個用戶進行了操作,從而完成審計。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊13 分享