文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美國信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁面 (TGZ) - 258.2Kb
手冊頁面 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 參考手冊  /  ...  /  舊版模式稽核日誌篩選

8.4.5.10 舊版模式稽核日誌篩選

注意

本節說明舊版稽核日誌篩選,如果安裝了 audit_log 外掛程式,但沒有規則式篩選所需的隨附稽核資料表與函數,則會套用此篩選。

舊版模式稽核日誌篩選已過時。

稽核日誌外掛程式可以篩選稽核的事件。這可讓您根據事件來源的帳戶或事件狀態,控制是否將稽核的事件寫入稽核日誌檔案。連線事件和陳述式事件的狀態篩選會分開進行。

依帳戶篩選舊版事件

若要根據來源帳戶篩選稽核的事件,請在伺服器啟動或執行階段設定下列其中一個 (而非兩者) 系統變數。這些已過時的變數僅適用於舊版稽核日誌篩選。

  • audit_log_include_accounts:要包含在稽核記錄中的帳戶。如果設定此變數,則只會稽核這些帳戶。

  • audit_log_exclude_accounts:要從稽核記錄中排除的帳戶。如果設定此變數,則會稽核除了這些帳戶以外的所有帳戶。

任一變數的值可以是 NULL,或是包含一或多個以逗號分隔的帳戶名稱的字串,每個帳戶名稱的格式為 使用者名稱@主機名稱。依預設,這兩個變數都是 NULL,在此情況下,不會執行任何帳戶篩選,並且會稽核所有帳戶。

修改 audit_log_include_accountsaudit_log_exclude_accounts 只會影響修改之後建立的連線,而不會影響現有的連線。

範例:若要僅為本機主機帳戶 user1user2 啟用稽核記錄,請像這樣設定 audit_log_include_accounts 系統變數:

SET GLOBAL audit_log_include_accounts = 'user1@localhost,user2@localhost';

同一時間,audit_log_include_accountsaudit_log_exclude_accounts 只能有一個為非 NULL 的值。

-- This sets audit_log_exclude_accounts to NULL
SET GLOBAL audit_log_include_accounts = value;

-- This fails because audit_log_include_accounts is not NULL
SET GLOBAL audit_log_exclude_accounts = value;

-- To set audit_log_exclude_accounts, first set
-- audit_log_include_accounts to NULL
SET GLOBAL audit_log_include_accounts = NULL;
SET GLOBAL audit_log_exclude_accounts = value;

如果您檢查任何一個變數的值,請注意 SHOW VARIABLES 會將 NULL 顯示為空字串。若要將 NULL 顯示為 NULL,請改用 SELECT

mysql> SHOW VARIABLES LIKE 'audit_log_include_accounts';
+----------------------------+-------+
| Variable_name              | Value |
+----------------------------+-------+
| audit_log_include_accounts |       |
+----------------------------+-------+
mysql> SELECT @@audit_log_include_accounts;
+------------------------------+
| @@audit_log_include_accounts |
+------------------------------+
| NULL                         |
+------------------------------+

如果使用者名稱或主機名稱因為包含逗號、空格或其他特殊字元而需要加上引號,請使用單引號將其引起來。如果變數值本身是以單引號引起來,請將每個內部的單引號加倍,或使用反斜線跳脫。以下每個陳述式都會為本機 root 帳戶啟用稽核記錄,並且是等效的,即使引號樣式不同:

SET GLOBAL audit_log_include_accounts = 'root@localhost';
SET GLOBAL audit_log_include_accounts = '''root''@''localhost''';
SET GLOBAL audit_log_include_accounts = '\'root\'@\'localhost\'';
SET GLOBAL audit_log_include_accounts = "'root'@'localhost'";

如果啟用了 ANSI_QUOTES SQL 模式,則最後一個陳述式將無法運作,因為在該模式下,雙引號表示識別符號引號,而不是字串引號。

依狀態篩選舊版事件

若要根據狀態篩選稽核的事件,請在伺服器啟動或執行階段設定以下系統變數。這些已棄用的變數僅適用於舊版稽核記錄篩選。對於 JSON 稽核記錄篩選,適用不同的狀態變數;請參閱稽核記錄選項和變數

每個變數都會採用 ALL(記錄所有相關事件;這是預設值)、ERRORS(僅記錄失敗的事件)或 NONE(不記錄事件)的值。例如,若要記錄所有語句事件,但僅記錄失敗的連線事件,請使用以下設定:

SET GLOBAL audit_log_statement_policy = ALL;
SET GLOBAL audit_log_connection_policy = ERRORS;

另一個原則系統變數 audit_log_policy 可用,但它不像 audit_log_connection_policyaudit_log_statement_policy 提供那麼多的控制權。它只能在伺服器啟動時設定。

注意

audit_log_policy 舊版模式系統變數已被棄用。

在執行階段,它是一個唯讀變數。它會採用 ALL(記錄所有事件;這是預設值)、LOGINS(記錄連線事件)、QUERIES(記錄語句事件)或 NONE(不記錄事件)的值。對於這些值中的任何一個,稽核記錄外掛程式會記錄所有選取的事件,而不區分成功或失敗。在啟動時使用 audit_log_policy 的方式如下:

  • 如果您不設定 audit_log_policy 或將其設定為預設值 ALL,則 audit_log_connection_policyaudit_log_statement_policy 的任何明確設定都會按照指定應用。如果未指定,它們預設為 ALL

  • 如果您將 audit_log_policy 設定為非 ALL 值,則該值會優先,並用於設定 audit_log_connection_policyaudit_log_statement_policy,如下表所示。如果您也將這兩個變數中的任何一個設定為非預設值 ALL 的值,則伺服器會將訊息寫入錯誤記錄檔,指出它們的值已被覆寫。

    啟動 audit_log_policy 值 產生的 audit_log_connection_policy 值 產生的 audit_log_statement_policy 值
    LOGINS ALL NONE
    QUERIES NONE ALL
    NONE NONE NONE