MySQL Log 紀錄檔 日誌 稽核

詳解MySQL四種Log機制 以日誌稽核解析追蹤事件

2016-01-22
MySQL伺服器雖然提供多樣化的系統日誌,但在稽核日誌上的表現卻差強人意。對此,本文介紹audit_login、mysql_audit這兩個MySQL UDF程式來彌補MySQL資料庫在稽核日誌支援上的不足。
在編譯過程中,筆者曾遇到「redefinition of typedef 'my_socket'」類似的錯誤。如果執行中也遇到相同的問題,就必須修改audit_login.c程式。修改內容如圖9所示,必須將my_sys.h與mysql.h位置掉換。


▲圖9 修改audit_login.c程式內容。

編譯成功之後,「/plugin/audit_login/」目錄下就會產生一個「audit_login.so」檔案,並且將此檔案複製到MySQL的「UDF」目錄內。可以利用show指令來取得UDF目錄的資訊,如圖10所示。


▲圖10 利用show指令來取得UDF目錄的資訊。

由於audit_login提供了支援MySQL 5.5.21及MySQL 5.5.32的版本,編譯好的模組檔案名稱也是audit_login.so。

如果目前的MySQL伺服器剛好是使用上述的版本,將該模組直接複製到「UDF」目錄內即可。最後,還必須登入MySQL伺服器執行下列指令來載入audit_login模組:


audit_login模組預設使用的組態檔名稱為「audit_login.cnf」,必須將此檔案放置到DATADIR(亦即資料庫放置的目錄)位置,相關組態選項如下:


完成安裝audit_login模組後,接下來說明如何使用audit_login模組。首先,在「/etc/my.cnf」內做以下的設定:


若無設定audit_login.cnf組態檔,audit_login預設會稽核所有帳號的登入資訊,並將儲存相關稽核紀錄的檔案放在「/(DATADIR)/audit_login.log」,如圖11所示。


▲圖11 查看audit_login.log內容。

audit_login模組所記錄的資料格式為json格式,json是一種以純文字來表示簡單的結構資料,可利用字串、數字、陣列(以[]符號表示)、物件(以{}符號表示)來儲存。使用json格式最大的好處在於,可以非常簡單地與其他程式溝通或交換資料。audit_login.log的格式(以物件符號表示{})如下所示,其中的欄位名稱意義說明如表2所示:


表2 audit_login.log欄位名稱說明

以資安的角度而言,audit_login模組可用來記錄登入成功或失敗的資訊,通常可發現嘗試登入MySQL伺服器的惡意來源。

安裝mysql-audit模組

成功安裝audit_login模組後,接著安裝mysql-audit模組,以便記錄資料庫物件(通常都為資料庫表格)上的資料庫動作。

首先,連結至官方網站(https://github.com/mcafee/mysql-audit)取得原始碼,在官方網站上其實也有提供已經編譯好的二進位碼,但經測試過,都有編碼的問題發生,亦即SQL指令內若含有中文字就會變成亂碼,因此這裡還是採用原始碼編譯的方式。

先解壓縮mysql-audit模組,然後查看「src」目錄下的audit_plugin.cc檔案,裡面提供了可支援的MySQL伺服器版本列表,可比對自己目前的MySQL伺服器版本是否在支援之列,如圖12所示。


▲圖12 查看自己的MySQL伺服器版本是否能夠被支援。

如果MySQL伺服器版本可被支援,即表示不需要取得偏移值,直接應用即可。

為簡化說明起見,本文所使用的MySQL伺服器版本為5.5.32(可被mysql_audit模組所支援),並假設目前已經安裝這個版本的MySQL伺服器(安裝目錄為「/usr/local/mysql55/」),安裝過程如下所示:


在編譯成功後,「src/.libs」目錄下將會產生libaudit_plugin.so檔案,再將此檔案複製到MySQL的「UDF」目錄。

接下來,登入至MySQL伺服器,執行下列SQL指令來安裝AUDIT模組:


; 安裝完成後,利用「show plugins」指令來檢查是否正常安裝好AUDIT模組,如圖13所示。


▲圖13 透過show plugins指令檢查是否已正常安裝AUDIT模組。


追蹤我們Featrue us

本站使用cookie及相關技術分析來改善使用者體驗。瞭解更多

我知道了!