本節說明舊版稽核日誌篩選,如果安裝 audit_log
外掛程式,但未包含規則型篩選所需的相關稽核表格與函數,則會套用此篩選。
舊版模式稽核日誌篩選已遭棄用。
稽核日誌外掛程式可以篩選稽核的事件。這可讓您根據事件的來源帳戶或事件狀態,控制是否將稽核的事件寫入稽核日誌檔案。狀態篩選會針對連線事件和陳述式事件分別進行。
若要根據來源帳戶篩選稽核的事件,請在伺服器啟動或執行時設定下列系統變數之一(而非兩者)。這些已棄用的變數僅適用於舊版稽核日誌篩選。
audit_log_include_accounts
:要包含在稽核記錄中的帳戶。如果設定此變數,則只會稽核這些帳戶。audit_log_exclude_accounts
:要從稽核記錄中排除的帳戶。如果設定此變數,則除了這些帳戶之外,所有帳戶都會進行稽核。
任一變數的值可以是 NULL
或包含一或多個以逗號分隔的帳戶名稱的字串,每個帳戶名稱的格式為
。預設情況下,兩個變數都是 user_name
@host_name
NULL
,在這種情況下,不會進行帳戶篩選,並且會對所有帳戶進行稽核。
修改 audit_log_include_accounts
或 audit_log_exclude_accounts
只會影響修改後建立的連線,而不會影響現有的連線。
範例:若要僅針對 user1
與 user2
本機主機帳戶啟用稽核記錄,請像這樣設定 audit_log_include_accounts
系統變數
SET GLOBAL audit_log_include_accounts = 'user1@localhost,user2@localhost';
一次只能將 audit_log_include_accounts
或 audit_log_exclude_accounts
其中一個設定為非 NULL
。
如果您設定了
audit_log_include_accounts
,伺服器會將audit_log_exclude_accounts
設定為NULL
。如果您嘗試設定
audit_log_exclude_accounts
,除非audit_log_include_accounts
為NULL
,否則會發生錯誤。在這種情況下,您必須先將audit_log_include_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 稽核記錄篩選,則適用不同的狀態變數;請參閱 稽核記錄選項和變數。
audit_log_connection_policy
:連線事件的記錄原則audit_log_statement_policy
:語句事件的記錄原則
每個變數都採用 ALL
(記錄所有相關事件;這是預設值)、ERRORS
(僅記錄失敗事件) 或 NONE
(不記錄事件) 的值。例如,若要記錄所有語句事件,但僅記錄失敗的連線事件,請使用這些設定
SET GLOBAL audit_log_statement_policy = ALL;
SET GLOBAL audit_log_connection_policy = ERRORS;
另一個原則系統變數 audit_log_policy
也可用,但它提供的控制不如 audit_log_connection_policy
和 audit_log_statement_policy
那麼多。它只能在伺服器啟動時設定。
audit_log_policy
舊版模式系統變數已棄用。
在執行時,它是一個唯讀變數。它採用 ALL
(記錄所有事件;這是預設值)、LOGINS
(記錄連線事件)、QUERIES
(記錄語句事件) 或 NONE
(不記錄事件) 的值。對於任何這些值,稽核記錄外掛程式都會記錄所有選取的事件,而不區分成功或失敗。audit_log_policy
在啟動時的使用方式如下
如果您沒有設定
audit_log_policy
或將其設定為預設值ALL
,則任何針對audit_log_connection_policy
或audit_log_statement_policy
的明確設定都會按指定套用。如果未指定,則它們預設為ALL
。如果您將
audit_log_policy
設定為非ALL
值,則該值優先,並用於設定audit_log_connection_policy
和audit_log_statement_policy
,如下表所示。如果您也將其中一個變數設定為非預設值ALL
的值,伺服器會將訊息寫入錯誤記錄檔,以指示它們的值已被覆寫。啟動 audit_log_policy 值 產生的 audit_log_connection_policy 值 產生的 audit_log_statement_policy 值 LOGINS
ALL
NONE
QUERIES
NONE
ALL
NONE
NONE
NONE