MySQL伺服器雖然提供多樣化的系統日誌,但在稽核日誌上的表現卻差強人意。對此,本文介紹audit_login、mysql_audit這兩個MySQL UDF程式來彌補MySQL資料庫在稽核日誌支援上的不足。
完成安裝AUDIT模組後,接下來說明AUDIT模組所提供的常用組態設定功能,如表3所示。
表3 AUDIT模組內常用的組態
在描述mysql_audit模組常用組態後,接著實際地使用此模組,首先設定my.cnf,設定說明如圖14所示:
|
▲圖14 設定my.cnf檔案內容。 |
(1) 設定要載入mysql_audit模組
(2) 開啟稽核功能
(3) 將相關稽核的資訊儲存至「/tmp/audit_json.log」
檔案內。
(4) 設定要稽核的資料庫動作為查詢(Select),可依本
身的需求設定其他稽核的動作,例如新增、刪除。
(5) 設定要稽核的資料庫對象,在本例為稽核「test」
資料庫下的所有表格(Table)。
設定完成並重新啟動MySQL伺服器後,登入到MySQL伺服器,在「test」資料庫內執行任意的select指令,如果一切正常,將會產生「/tmp/audit_json.log」,檔案內容如圖15所示。
|
▲圖15 檢視「/tmp/audit_json.log」檔案內容。 |
就同audit_login模組一樣,mysql_audit模組的紀錄採用json格式,格式如下,表4說明了各欄位的代表意義:
表4 mysql_audit欄位說明
至此,一個具有稽核功能的MySQL伺服器就大功告成了。
結語
當資料庫出現問題時,資料庫管理員通常都會被問到一個問題,是否能夠提供曾經執行過的SQL指令以便於追查?其實,使用mysql_audit模組即可辦到。
但要特別提醒的是,由於mysql_audit模組是將稽核紀錄寫入到磁碟的檔案內,如果資料庫正處於繁忙的狀態下,可能會產生大量的磁碟存取,進而拖慢系統的效能,其實,這點必須自行取捨。
另一方面,一般認知的暴力攻擊,通常是用在SSH服務上(嘗試猜出使用者密碼)。殊不知,MySQL伺服器往往也是暴力攻擊的對象,使用audit_login模組,就可以即時記錄與MySQL伺服器相關的紀錄,進而快速地掌握是否有惡意來源正在嘗試利用暴力攻擊的方式來攻擊MySQL伺服器。
<本文作者:吳惠麟,多年資安經驗,喜好利用開源碼建構相關解決方案,著有「資訊安全原理與實驗」等書。>