成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL數(shù)據(jù)庫Audit插件的使用技巧總結(jié)

數(shù)據(jù)庫 MySQL
本文詳細(xì)介紹了MySQL數(shù)據(jù)庫Audit插件的一些使用技巧,希望能給讀者帶來收獲。

MySQL數(shù)據(jù)庫中(5.5版本),增加了一個(gè)新的插件:Audit plugin,用于對(duì)數(shù)據(jù)庫連接和數(shù)據(jù)庫操作進(jìn)行審計(jì)。接下來我們?cè)敿?xì)介紹Audit插件的使用。

相關(guān)代碼如下:

 

  1. sql/sql_audit.cc 

 

該文件定義了audit插件的接口函數(shù)。

 

  1. sql/sql_audit.h 

 

申明函數(shù),并定義了函數(shù)mysql_audit_general_log,在觸發(fā)audit時(shí),首先調(diào)用的就是該函數(shù)。

 

  1. plugin/audit_null/audit_null.c 

 

這是一個(gè)模板程序,給出了一個(gè)最基本的audit插件所需要定義的接口。

為了實(shí)現(xiàn)一個(gè)完整的audit程序,需要包括插件初始化、主要函數(shù)、卸載插件后的調(diào)用函數(shù)。這里我們以audit_null.c為例:

  1. static int audit_null_plugin_init(void *arg __attribute__((unused))) 

 

在安裝插件時(shí),會(huì)調(diào)用該函數(shù),主要用于做一些初始化的工作,比如初始化全局變量等。

  1. static void audit_null_notify(MYSQL_THD thd, unsigned int event_class, constvoid *event) 

 

這是audit插件的主要函數(shù),在相應(yīng)的事件被觸發(fā)時(shí),將會(huì)調(diào)用到該函數(shù),參數(shù)包括:

thd:觸發(fā)該函數(shù)的線程,在結(jié)構(gòu)體THD中包含了相當(dāng)豐富的信息,可以借此實(shí)現(xiàn)很多有趣的功能

event_class/event:前者表示事件的類型,用于決定第三個(gè)參數(shù)event結(jié)構(gòu)體的類型,使用宏定義,值為MYSQL_AUDIT_GENERAL_CLASS時(shí)表示由操作數(shù)據(jù)庫的行為所觸發(fā),值為MYSQL_AUDIT_CONNECTION_CLASS時(shí)表示由發(fā)起數(shù)據(jù)庫連接所觸發(fā),而針對(duì)不同的類型,也會(huì)調(diào)用不同的接口函數(shù)來觸發(fā)audit。

 

  1. staticaudit_handler_t audit_handlers[] =  
  2.  
  3. {  
  4.  
  5. general_class_handler,connection_class_handler  
  6.  
  7. }; 

 

對(duì)上述兩種情況下,又會(huì)細(xì)分到多個(gè)事件類型,在文件plugin_audit.h中進(jìn)行了定義

1. 發(fā)起連接時(shí)

 

  1. #defineMYSQL_AUDIT_CONNECTION_CONNECT 0 

 

完成認(rèn)證后觸發(fā)

 

  1. #define MYSQL_AUDIT_CONNECTION_DISCONNECT 1 

 

連接被中斷時(shí)觸發(fā)

 

  1. #define MYSQL_AUDIT_CONNECTION_CHANGE_USER 2 

 

在執(zhí)行COM_CHANGE_USER命令后觸發(fā)。

event參數(shù)的結(jié)構(gòu)為:mysql_event_connection。

2.操作數(shù)據(jù)庫時(shí)

  1. #defineMYSQL_AUDIT_GENERAL_LOG 0   

在提交給general query log之前被觸發(fā)

 

  1. #define MYSQL_AUDIT_GENERAL_ERROR 1 

 

在發(fā)送給用戶錯(cuò)誤之前觸發(fā)

 

  1. #define MYSQL_AUDIT_GENERAL_RESULT 2 

 

當(dāng)將結(jié)果集合發(fā)送給用戶后觸發(fā)

 

  1. #defineMYSQL_AUDIT_GENERAL_STATUS 3 

 

當(dāng)發(fā)送一個(gè)結(jié)果集或發(fā)生錯(cuò)誤時(shí)被觸發(fā)。event參數(shù)的結(jié)構(gòu)體為:mysql_event_general。

不管event的結(jié)構(gòu)體是哪一個(gè),都在其中記錄了上述七種事件類型,我們就可以根據(jù)不同的事件類型,有針對(duì)性的進(jìn)行插件代碼的編寫。

3. static int audit_null_plugin_deinit(void*arg __attribute__((unused)))

當(dāng)卸載插件時(shí),會(huì)調(diào)用該函數(shù),可以用來執(zhí)行一些釋放資源、關(guān)閉文件等操作

4. 定義插件的描述符結(jié)構(gòu)體:

 

  1. struct st_mysql_audit    
  2.  
  3. {    
  4.  
  5. int interface_version;    
  6.  
  7. void (*release_thd)(MYSQL_THD);    
  8.  
  9. void (*event_notify)(MYSQL_THD, unsigned int, const void *);    
  10.  
  11. unsigned long class_mask[MYSQL_AUDIT_CLASS_MASK_SIZE];    
  12.  
  13. };   

 

Version,值一般為MYSQL_AUDIT_INTERFACE_VERSION。

release_thd,一般設(shè)置為NULL。

event_notify,主要的處理函數(shù),當(dāng)發(fā)生某些事件時(shí)被調(diào)用(audit_null_notify)。

class_mask,掩碼。

release_thd和event_notify可以結(jié)合起來用,當(dāng)事件觸發(fā)event_notify時(shí),這時(shí)候插件是不可以u(píng)ninstall的,當(dāng)完成調(diào)用后,服務(wù)器會(huì)通知release_thd函數(shù)。這樣,我們可以在event_notify中分配資源,并在release_thd中統(tǒng)一的進(jìn)行釋放。

5.定義statues變量,用于指定在調(diào)用SHOWSTATIS時(shí),顯示哪些值

 

  1. static struct st_mysql_show_var audit_null_status[] 

 

6. 插件的庫描述符

 

  1. mysql_declare_plugin(audit_null)            
  2.  
  3. {                                               
  4.  
  5. MYSQL_AUDIT_PLUGIN,         /* type                            */    
  6.  
  7. &audit_null_descriptor,     /* descriptor                            */    
  8.  
  9. "NULL_AUDIT",               /* name                            */    
  10.  
  11. "Oracle Corp",              /* author                             */    
  12.  
  13. "Simple NULL Audit",        /* description                          */    
  14.  
  15. PLUGIN_LICENSE_GPL,    
  16.  
  17. audit_null_plugin_init,     /* init function (when loaded)               */    
  18.  
  19. audit_null_plugin_deinit,   /* deinit function (when unloaded)             */   

 

其中 第三個(gè)字段 “NULL_AUDIT”就是在執(zhí)行INSTALLPLUGIN時(shí)的插件名,如果不一致,不報(bào)無法找到在庫文件中找到符號(hào)的錯(cuò)誤。

總結(jié):

Audit插件可以被多種事件所觸發(fā),因此,當(dāng)服務(wù)器繁忙時(shí),需要小心謹(jǐn)慎的編寫代碼,防止產(chǎn)生太多的額外開銷,以影響服務(wù)器的整體性能。

【編輯推薦】

  1. 利用mysql的audit審計(jì)功能記錄用戶操作信息
  2. MySQL索引背后的數(shù)據(jù)結(jié)構(gòu)及算法之索引實(shí)現(xiàn)
  3. NaviCat通過Http方式連接服務(wù)器的MySQL數(shù)據(jù)庫
  4. 詳解Discuz_WIN7_Apache_MySQL_PHP平臺(tái)搭建
責(zé)任編輯:趙鵬 來源: CSDN博客
相關(guān)推薦

2010-11-29 11:51:59

Sybase數(shù)據(jù)庫維護(hù)

2011-09-02 10:06:51

OracleSqlLoad常用技巧

2018-11-16 16:37:35

MySQL數(shù)據(jù)庫熱璞科技

2011-03-17 14:09:25

Oracle數(shù)據(jù)庫字符

2016-12-29 12:24:33

MySQL數(shù)據(jù)庫移植

2019-01-02 11:10:40

MySQL數(shù)據(jù)庫數(shù)據(jù)庫設(shè)計(jì)

2019-07-11 08:45:00

MySQL數(shù)據(jù)庫緩存

2010-05-31 17:15:39

MySQL數(shù)據(jù)庫

2018-09-17 16:30:24

數(shù)據(jù)庫MySQL小技巧

2020-08-31 10:48:11

MySQL數(shù)據(jù)庫數(shù)據(jù)庫技巧

2019-12-18 08:00:09

MySQL數(shù)據(jù)庫ORDER BY

2011-04-02 09:23:19

MySQL數(shù)據(jù)庫查詢效率

2011-04-02 09:33:13

MySQL數(shù)據(jù)庫查詢效率

2011-04-02 09:33:08

MySQL數(shù)據(jù)庫查詢效率

2011-03-10 11:17:03

數(shù)據(jù)庫設(shè)計(jì)技巧

2011-08-29 14:17:10

SQL Serverdefault val

2010-06-30 10:37:55

MS-SQL Serv

2010-05-31 15:12:44

MySQL數(shù)據(jù)庫

2010-05-26 09:44:41

MySQL數(shù)據(jù)庫使用

2024-02-28 08:06:17

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 亚洲成人一区二区 | 91视视频在线观看入口直接观看 | 69堂永久69tangcom| 国产精品区一区二区三 | 久草电影网 | 国产精品a免费一区久久电影 | 紧缚调教一区二区三区视频 | 久久夜夜| 国产一区h | 成人看片在线观看 | www.久久艹| 欧美一区不卡 | 宅男噜噜噜66一区二区 | 激情五月激情综合网 | 91久久久久久久久久久久久 | 欧美一区二区三区精品免费 | 国产精品亚洲一区 | 精品久久久久久亚洲综合网 | 81精品国产乱码久久久久久 | 久热久热 | 91在线最新 | 国产精品日韩欧美 | 天天干天天干 | 黄色一级电影免费观看 | 亚洲成人av | 中文字幕男人的天堂 | 日韩精品一区二区三区在线观看 | 精品久久久久久亚洲综合网站 | 欧美一区二区三区免费在线观看 | 精品一区二区视频 | 91偷拍精品一区二区三区 | a在线视频 | 蜜桃视频麻豆 | 免费黄色片在线观看 | 天天躁日日躁性色aⅴ电影 免费在线观看成年人视频 国产欧美精品 | 色婷婷综合在线观看 | 国产综合一区二区 | 国产精品三级久久久久久电影 | 一区在线观看 | 99re超碰 | 亚洲欧美日韩在线一区二区 |