解開MySQL封印 加掛稽核記錄功能

MySQL是最受歡迎的開源資料庫,但在Log記錄方面的表現一直未盡人意,本文將透過外掛mysql-audit稽核軟體的方式來補足這一方面的缺憾。先從安裝MySQL資料庫說起,然後說明如何安裝mysql-audit,並進行測試。

如果自身的MySQL版本已在此支援清單之中,表示毋須取得偏移值,直接應用即可;若MySQL的版本沒有被mysql-audit所支援,則必須先取得偏移值,並手動設定偏移值的資訊,才可讓mysql-audit以外掛的形式內嵌於MySQL軟體內。

這裡以MySQL資料庫版本並未被mysql-audit支援為例進行說明,相關的安裝步驟如下:

    1. 編譯mysql-audit外掛程式
    2. 取得相關偏移值的資訊
    3. 設定相關的資訊
首先進行第一個步驟,編譯mysql-audit。先切換至mysql-audit的原始目錄內,並執行「sh bootstrap.sh」指令以產生configure檔。

筆者在實作的過程中發生一些編譯上的錯誤,是有關於Werror與Wimplicit選項的錯誤,這可能是gcc編譯程式版本的問題。

所以,在產生的configure檔案之中,將「CPPFLAGS="$CPPFLAGS -Werror -Wimplicit」更改為「CPPFLAGS="$CPPFLAGS "」。換句話說,就是去除-Werror及-Wimplicit選項,再進行組態與編譯的動作。

接著,執行如下的指令進行編態與編譯:


編譯成功之後,在「src/.libs」目錄下將會產生libaudit_plugin.so檔案。再將此檔案複製到MySQL的外掛目錄(/usr/local/mysql5/lib/mysql/plugin)之中即可。

下表將說明mysql-audit所提供的常用組態設定功能。

mysql-audit常用組態設定

接下來,說明當所使用的MySQL資料庫版本不為mysql-audit所支援時,該如何取得偏移值。首先,mysqld程式必須為偵錯模式,可利用「gdb mysqld」來測試mysqld是否被編譯為偵錯模式,如下圖所示,若能進入gdb模式,即表示該程式含有偵錯資訊。


▲利用「gdb mysqld」測試mysqld是否被編譯為偵錯模式。

在確認mysqld為偵錯模式的程式後,即可執行「sh offset-extract.sh mysqld」指令來取得相關的偏移值,將會出現如下圖的結果。

其中的4068等數值即為偏移值,而後,再將此數值設定至「/etc/my.cnf」檔案中即可。


▲執行「sh offset-extract.sh mysqld」指令以取得相關的偏移值。

測試mysql-audit

先行設定my.cnf,如下圖所示。在筆者測試的過程中,發現即使在my.cnf已經設定開啟記錄功能(audit_json_file=on),但是MySQL資料庫仍不會自動開啟記錄功能,使用者必須自行以手動的方式開啟記錄功能。


▲先行設定my.cnf。

自行以MySQL程式登入資料庫之後,接著下達「show global variables like 'audit%';」指令,顯示audit的系統變數狀態。如果發現「audit_json_file=OFF」,就需要手動設定audit_json_file選項。

可以使用「set global audit_json_file="ON";」指令,來設定「audit_json_file=ON」以啟動記錄功能,執行過程如下圖所示。


▲設定「audit_json_file=ON」以啟動記錄功能。

設定完成後,可任意地存取名稱為「test」之資料庫內的所有表格,如果一切正常,在「/tmp/mysqllog.json」內將會儲存所有存取資料庫名稱為test的紀錄,如下圖示。


▲在「/tmp/mysqllog.json」內將會儲存所有存取資料庫名稱為test的紀錄。

至此,一個支援稽核功能的MySQL資料庫即宣告完成了。


追蹤我們Featrue us

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

我知道了!