以下各節提供 MySQL 企業稽核元素的參考
若要安裝稽核日誌表格和函數,請使用第 8.4.5.2 節,「安裝或解除安裝 MySQL 企業稽核」中提供的說明。除非已安裝這些物件,否則 audit_log 外掛程式會在(已過時的)舊版模式下運作。請參閱第 8.4.5.10 節,「舊版模式稽核日誌篩選」。
MySQL 企業稽核使用 mysql 系統資料庫中的表格,以持續儲存篩選器和使用者帳戶資料。只有具有該資料庫權限的使用者才能存取這些表格。若要使用不同的資料庫,請在伺服器啟動時設定 audit_log_database 系統變數。表格使用 InnoDB 儲存引擎。
如果這些表格遺失,則 audit_log 外掛程式會在(已過時的)舊版模式下運作。請參閱第 8.4.5.10 節,「舊版模式稽核日誌篩選」。
audit_log_filter 表格儲存篩選器定義。表格具有下列欄位
NAME篩選器名稱。
FILTER與篩選器名稱相關聯的篩選器定義。定義會儲存為
JSON值。
audit_log_user 表格儲存使用者帳戶資訊。表格具有下列欄位
USER帳戶的使用者名稱部分。對於
user1@localhost帳戶,USER部分為user1。HOST帳戶的主機名稱部分。對於
user1@localhost帳戶,HOST部分為localhost。FILTERNAME指派給帳戶的篩選器名稱。篩選器名稱會將帳戶與
audit_log_filter表格中定義的篩選器關聯起來。
本節說明每個稽核日誌函數的用途、呼叫序列和傳回值。如需這些函數可在哪些條件下調用的相關資訊,請參閱第 8.4.5.7 節,「稽核日誌篩選」。
每個稽核日誌函數都會傳回一個字串,指示操作是否成功。OK 表示成功。ERROR: 表示失敗。message
稽核日誌函數會將字串引數轉換為 utf8mb4,而字串傳回值為 utf8mb4 字串。先前,稽核日誌函數將字串引數視為二進位字串(這表示它們不區分大小寫),而字串傳回值為二進位字串。
如果從 mysql 用戶端內調用稽核日誌函數,二進位字串結果會使用十六進位表示法顯示,具體取決於 --binary-as-hex 的值。如需該選項的詳細資訊,請參閱第 6.5.1 節,「mysql — MySQL 命令列用戶端」。
這些稽核日誌函數可用
audit_log_encryption_password_get([keyring_id])此函數從 MySQL 金鑰環擷取稽核日誌加密密碼,必須啟用金鑰環,否則會發生錯誤。可以使用任何金鑰環元件或外掛程式;如需說明,請參閱第 8.4.4 節,「MySQL 金鑰環」。
若不使用引數,此函數會以二進位字串擷取目前的加密密碼。可以給定引數來指定要擷取哪個稽核日誌加密密碼。引數必須是目前密碼或已封存密碼的金鑰環 ID。
如需稽核日誌加密的其他資訊,請參閱加密稽核日誌檔案。
引數
keyring_id:此選用引數表示要擷取的密碼的金鑰環 ID。允許的最大長度為 766 個位元組。如果省略,此函數會擷取目前的密碼。傳回值
成功時的密碼字串(最多 766 個位元組),或失敗時傳回
NULL和錯誤。範例
擷取目前的密碼
mysql> SELECT audit_log_encryption_password_get(); +-------------------------------------+ | audit_log_encryption_password_get() | +-------------------------------------+ | secret | +-------------------------------------+若要依 ID 擷取密碼,您可以查詢 Performance Schema
keyring_keys表格,以判斷現有哪些稽核日誌金鑰環 IDmysql> SELECT KEY_ID FROM performance_schema.keyring_keys WHERE KEY_ID LIKE 'audit_log%' ORDER BY KEY_ID; +-----------------------------+ | KEY_ID | +-----------------------------+ | audit_log-20190415T152248-1 | | audit_log-20190415T153507-1 | | audit_log-20190416T125122-1 | | audit_log-20190416T141608-1 | +-----------------------------+ mysql> SELECT audit_log_encryption_password_get('audit_log-20190416T125122-1'); +------------------------------------------------------------------+ | audit_log_encryption_password_get('audit_log-20190416T125122-1') | +------------------------------------------------------------------+ | segreto | +------------------------------------------------------------------+audit_log_encryption_password_set(password)將目前的稽核日誌加密密碼設定為引數,並將密碼儲存在 MySQL 金鑰環中。密碼會儲存為
utf8mb4字串。先前,密碼以二進位形式儲存。如果啟用加密,此函數會執行日誌檔案輪換操作,重新命名目前的日誌檔案,並使用密碼開始新的加密日誌檔案。必須啟用金鑰環,否則會發生錯誤。可以使用任何金鑰環元件或外掛程式;如需說明,請參閱第 8.4.4 節,「MySQL 金鑰環」。
如需稽核日誌加密的其他資訊,請參閱加密稽核日誌檔案。
引數
password:密碼字串。允許的最大長度為 766 個位元組。傳回值
成功時傳回 1,失敗時傳回 0。
範例
mysql> SELECT audit_log_encryption_password_set(password); +---------------------------------------------+ | audit_log_encryption_password_set(password) | +---------------------------------------------+ | 1 | +---------------------------------------------+呼叫任何其他篩選函數會立即影響可操作的稽核日誌篩選,並更新稽核日誌表格。如果改為直接使用
INSERT、UPDATE和DELETE等陳述式修改這些表格的內容,則變更不會立即影響篩選。若要刷新您的變更並使其生效,請呼叫audit_log_filter_flush()。警告只有在直接修改稽核表格之後,才應使用
audit_log_filter_flush(),以強制重新載入所有篩選器。否則,應避免使用此函數。實際上,它相當於簡化版的卸載和重新載入audit_log外掛程式,使用UNINSTALL PLUGIN加INSTALL PLUGIN。audit_log_filter_flush()會影響所有目前的連線,並將它們與先前的篩選器分離。除非目前的連線中斷並重新連線,或執行變更使用者操作,否則將不再記錄它們。如果此函數失敗,則會傳回錯誤訊息,並停用稽核日誌,直到下次成功呼叫
audit_log_filter_flush()為止。引數
無。
傳回值
一個字串,表示操作是否成功。
OK表示成功。ERROR:表示失敗。message範例
mysql> SELECT audit_log_filter_flush(); +--------------------------+ | audit_log_filter_flush() | +--------------------------+ | OK | +--------------------------+audit_log_filter_remove_filter(filter_name)給定篩選器名稱,從目前的篩選器集中移除篩選器。篩選器不存在並非錯誤。
如果移除的篩選器指派給任何使用者帳戶,這些使用者會停止篩選(他們會從
audit_log_user表格中移除)。終止篩選包括這些使用者的任何目前連線:它們會與篩選器分離,且不再記錄。引數
filter_name:指定篩選器名稱的字串。
傳回值
一個字串,表示操作是否成功。
OK表示成功。ERROR:表示失敗。message範例
mysql> SELECT audit_log_filter_remove_filter('SomeFilter'); +----------------------------------------------+ | audit_log_filter_remove_filter('SomeFilter') | +----------------------------------------------+ | OK | +----------------------------------------------+audit_log_filter_remove_user(user_name)給定使用者帳戶名稱,讓使用者不再指派給篩選器。如果使用者未指派篩選器,並非錯誤。使用者目前連線的篩選不受影響。使用者的新連線會使用預設帳戶篩選器(如果有的話)篩選,否則不會記錄。
如果名稱是
%,此函數會移除用於任何未明確指派篩選器的使用者帳戶的預設帳戶篩選器。引數
user_name:使用者帳戶名稱,格式為的字串,或user_name@host_name%來表示預設帳戶。
傳回值
一個字串,表示操作是否成功。
OK表示成功。ERROR:表示失敗。message範例
mysql> SELECT audit_log_filter_remove_user('user1@localhost'); +-------------------------------------------------+ | audit_log_filter_remove_user('user1@localhost') | +-------------------------------------------------+ | OK | +-------------------------------------------------+audit_log_filter_set_filter(filter_name,definition)給定篩選器名稱和定義,將篩選器新增至目前的篩選器集。如果篩選器已存在且由任何目前的連線使用,則這些連線會與篩選器分離,且不再記錄。發生這種情況的原因是新的篩選器定義有與先前 ID 不同的新篩選器 ID。
引數
filter_name:指定篩選器名稱的字串。definition:一個JSON值,指定篩選器定義。
傳回值
一個字串,表示操作是否成功。
OK表示成功。ERROR:表示失敗。message範例
mysql> SET @f = '{ "filter": { "log": false } }'; mysql> SELECT audit_log_filter_set_filter('SomeFilter', @f); +-----------------------------------------------+ | audit_log_filter_set_filter('SomeFilter', @f) | +-----------------------------------------------+ | OK | +-----------------------------------------------+audit_log_filter_set_user(user_name,filter_name)給定使用者帳戶名稱和篩選器名稱,將篩選器指派給使用者。一個使用者只能指派一個篩選器,因此如果使用者已經指派了篩選器,則會取代指派。使用者目前連線的篩選不受影響。新連線會使用新的篩選器篩選。
在特殊情況下,名稱
%代表預設帳戶。篩選器會用於任何未明確指派篩選器的使用者帳戶的連線。引數
user_name:使用者帳戶名稱,格式為的字串,或user_name@host_name%來表示預設帳戶。filter_name:指定篩選器名稱的字串。
傳回值
一個字串,表示操作是否成功。
OK表示成功。ERROR:表示失敗。message範例
mysql> SELECT audit_log_filter_set_user('user1@localhost', 'SomeFilter'); +------------------------------------------------------------+ | audit_log_filter_set_user('user1@localhost', 'SomeFilter') | +------------------------------------------------------------+ | OK | +------------------------------------------------------------+讀取稽核日誌並傳回
JSON字串結果。如果稽核日誌格式不是JSON,則會發生錯誤。若不使用引數或使用
JSON雜湊引數,audit_log_read()會從稽核日誌讀取事件,並傳回包含稽核事件陣列的JSON字串。雜湊引數中的項目會影響讀取的方式,如下所述。傳回的陣列中的每個元素都是以JSON雜湊表示的事件,例外的是最後一個元素可能是JSONnull值,表示沒有可供讀取的後續事件。如果使用由
JSONnull值組成的引數,則audit_log_read()會關閉目前的讀取序列。如需稽核日誌讀取程序的其他詳細資訊,請參閱第 8.4.5.6 節,「讀取稽核日誌檔案」。
引數
若要取得最近寫入事件的書籤,請呼叫
audit_log_read_bookmark()。arg:此引數為選用。若省略,函式會從目前位置讀取事件。若存在,引數可以是JSONnull值以關閉讀取序列,或是JSON雜湊。在雜湊引數中,項目為選用,並控制讀取操作的各方面,例如開始讀取的位置或要讀取的事件數量。以下項目具有意義(其他項目會被忽略)start:要讀取的第一個事件在稽核日誌中的位置。該位置以時間戳記給定,讀取會從發生於時間戳記值當下或之後的第一個事件開始。start項目具有以下格式,其中value為字面時間戳記值"start": { "timestamp": "value" }timestamp、id:要讀取的第一個事件在稽核日誌中的位置。timestamp和id項目共同組成一個書籤,可唯一識別特定事件。如果audit_log_read()引數包含任一項目,則必須同時包含兩者才能完整指定位置,否則會發生錯誤。max_array_length:要從日誌讀取的最大事件數。如果省略此項目,預設會讀取到日誌結尾,或直到讀取緩衝區已滿,以先發生者為準。
若要為
audit_log_read()指定起始位置,請傳遞包含start項目或由timestamp和id項目組成的書籤的雜湊引數。如果雜湊引數同時包含start項目和書籤,則會發生錯誤。如果雜湊引數未指定起始位置,讀取會從目前位置繼續。
如果時間戳記值不包含時間部分,則假設時間部分為
00:00:00。傳回值
如果呼叫成功,傳回值會是包含稽核事件陣列的
JSON字串,或是如果傳遞JSONnull值以關閉讀取序列,則傳回JSONnull值。如果呼叫失敗,傳回值會是NULL,並發生錯誤。範例
mysql> SELECT audit_log_read(audit_log_read_bookmark()); +-----------------------------------------------------------------------+ | audit_log_read(audit_log_read_bookmark()) | +-----------------------------------------------------------------------+ | [ {"timestamp":"2020-05-18 22:41:24","id":0,"class":"connection", ... | +-----------------------------------------------------------------------+ mysql> SELECT audit_log_read('null'); +------------------------+ | audit_log_read('null') | +------------------------+ | null | +------------------------+注意事項
在 MySQL 8.4 之前,字串傳回值可能是二進位
JSON字串。如需將這類值轉換為非二進位字串的資訊,請參閱 第 8.4.5.6 節,〈讀取稽核日誌檔案〉。傳回代表最近寫入的稽核日誌事件之書籤的
JSON字串。如果稽核日誌格式不是JSON,則會發生錯誤。書籤為包含
timestamp和id項目的JSON雜湊,可唯一識別稽核日誌中事件的位置。適合傳遞給audit_log_read(),以向該函式指示開始讀取的位置。如需稽核日誌讀取程序的其他詳細資訊,請參閱第 8.4.5.6 節,「讀取稽核日誌檔案」。
引數
無。
傳回值
成功時傳回包含書籤的
JSON字串,失敗時則傳回NULL和錯誤。範例
mysql> SELECT audit_log_read_bookmark(); +-------------------------------------------------+ | audit_log_read_bookmark() | +-------------------------------------------------+ | { "timestamp": "2019-10-03 21:03:44", "id": 0 } | +-------------------------------------------------+注意事項
在 MySQL 8.4 之前,字串傳回值可能是二進位
JSON字串。如需將這類值轉換為非二進位字串的資訊,請參閱 第 8.4.5.6 節,〈讀取稽核日誌檔案〉。引數
無。
傳回值
重新命名的檔案名稱。
範例
mysql> SELECT audit_log_rotate();使用
audit_log_rotate()需要AUDIT_ADMIN權限。
表 8.44 稽核日誌選項和變數參考
本節說明組態 MySQL Enterprise Audit 運作的命令選項和系統變數。如果在啟動時間指定的值不正確,則 audit_log 外掛程式可能無法正確初始化,且伺服器不會載入它。在這種情況下,伺服器也可能會針對其他稽核日誌設定產生錯誤訊息,因為它無法辨識這些設定。
若要組態稽核日誌外掛程式的啟用,請使用此選項
-
命令列格式 --audit-log[=value]類型 列舉 預設值 ON有效值 ONOFFFORCEFORCE_PLUS_PERMANENT此選項控制伺服器在啟動時載入
audit_log外掛程式的方式。只有在先前使用INSTALL PLUGIN註冊外掛程式,或使用--plugin-load或--plugin-load-add載入外掛程式時,才能使用此選項。請參閱 第 8.4.5.2 節,〈安裝或解除安裝 MySQL Enterprise Audit〉。選項值應為外掛程式載入選項可用的值之一,如 第 7.6.1 節,〈安裝和解除安裝外掛程式〉中所述。例如,
--audit-log=FORCE_PLUS_PERMANENT會告知伺服器載入外掛程式,並防止其在伺服器執行時被移除。
如果啟用稽核日誌外掛程式,則會公開數個系統變數,以允許控制記錄
mysql> SHOW VARIABLES LIKE 'audit_log%';
+--------------------------------------+--------------+
| Variable_name | Value |
+--------------------------------------+--------------+
| audit_log_buffer_size | 1048576 |
| audit_log_compression | NONE |
| audit_log_connection_policy | ALL |
| audit_log_current_session | OFF |
| audit_log_database | mysql |
| audit_log_disable | OFF |
| audit_log_encryption | NONE |
| audit_log_exclude_accounts | |
| audit_log_file | audit.log |
| audit_log_filter_id | 0 |
| audit_log_flush | OFF |
| audit_log_flush_interval_seconds | 0 |
| audit_log_format | NEW |
| audit_log_format_unix_timestamp | OFF |
| audit_log_include_accounts | |
| audit_log_max_size | 0 |
| audit_log_password_history_keep_days | 0 |
| audit_log_policy | ALL |
| audit_log_prune_seconds | 0 |
| audit_log_read_buffer_size | 32768 |
| audit_log_rotate_on_size | 0 |
| audit_log_statement_policy | ALL |
| audit_log_strategy | ASYNCHRONOUS |
+--------------------------------------+--------------+您可以在伺服器啟動時設定其中任何變數,並且可以在執行時間設定其中一些變數。那些僅適用於舊版模式稽核日誌篩選的變數會特別註明。
-
命令列格式 --audit-log-buffer-size=#系統變數 audit_log_buffer_size範圍 全域 動態 否 SET_VAR提示適用否 類型 整數 預設值 1048576最小值 4096最大值 (64 位元平台) 18446744073709547520最大值 (32 位元平台) 4294967295單位 位元組 區塊大小 4096當稽核日誌外掛程式以非同步方式將事件寫入日誌時,它會使用緩衝區來儲存事件內容,然後再寫入。此變數控制該緩衝區的大小,以位元組為單位。伺服器會將值調整為 4096 的倍數。此外掛程式使用單一緩衝區,它會在初始化時配置該緩衝區,並在終止時移除該緩衝區。僅當記錄為非同步時,外掛程式才會配置此緩衝區。
-
命令列格式 --audit-log-compression=value系統變數 audit_log_compression範圍 全域 動態 否 SET_VAR提示適用否 類型 列舉 預設值 NONE有效值 NONEGZIP稽核日誌檔案的壓縮類型。允許的值為
NONE(不壓縮;預設值)和GZIP(GNU Zip 壓縮)。如需更多資訊,請參閱壓縮稽核日誌檔案。 -
命令列格式 --audit-log-connection-policy=value已棄用 是 系統變數 audit_log_connection_policy範圍 全域 動態 是 SET_VAR提示適用否 類型 列舉 預設值 ALL有效值 ALLERRORSNONE注意事項此已棄用變數僅適用於舊版模式稽核日誌篩選(請參閱 第 8.4.5.10 節,〈舊版模式稽核日誌篩選〉)。
控制稽核日誌外掛程式如何將連線事件寫入其日誌檔案的原則。下表顯示允許的值。
值 描述 ALL記錄所有連線事件 ERRORS僅記錄失敗的連線事件 NONE不記錄連線事件 注意事項在伺服器啟動時,如果也指定了
audit_log_policy,則可能會覆寫為audit_log_connection_policy提供的任何明確值,如 第 8.4.5.5 節,〈組態稽核記錄特性〉中所述。 -
系統變數 audit_log_current_session範圍 全域、工作階段 動態 否 SET_VAR提示適用否 類型 布林值 預設值 取決於篩選原則是否啟用目前工作階段的稽核記錄。此變數的工作階段值為唯讀。它會在工作階段開始時根據
audit_log_include_accounts和audit_log_exclude_accounts系統變數的值設定。稽核記錄外掛程式會使用工作階段值來判斷是否稽核該工作階段的事件。(有一個全域值,但外掛程式不會使用它。) -
命令列格式 --audit-log-database=值系統變數 audit_log_database範圍 全域 動態 否 SET_VAR提示適用否 類型 字串 預設值 mysql指定
audit_log外掛程式用來尋找其資料表的資料庫。此變數為唯讀。如需更多資訊,請參閱 第 8.4.5.2 節,〈安裝或解除安裝 MySQL Enterprise Audit〉。 -
命令列格式 --audit-log-disable[={OFF|ON}]系統變數 audit_log_disable範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 OFF允許停用所有連線中和已連線工作階段的稽核記錄。除了
SYSTEM_VARIABLES_ADMIN權限之外,停用稽核記錄還需要AUDIT_ADMIN權限。請參閱 第 8.4.5.9 節,〈停用稽核記錄〉。 -
命令列格式 --audit-log-encryption=值系統變數 audit_log_encryption範圍 全域 動態 否 SET_VAR提示適用否 類型 列舉 預設值 NONE有效值 NONEAES稽核記錄檔的加密類型。允許的值為
NONE(不加密;預設值) 和AES(AES-256-CBC 密碼加密)。如需更多資訊,請參閱 加密稽核記錄檔。 -
命令列格式 --audit-log-exclude-accounts=值已棄用 是 系統變數 audit_log_exclude_accounts範圍 全域 動態 是 SET_VAR提示適用否 類型 字串 預設值 NULL注意事項此已棄用變數僅適用於舊版模式稽核日誌篩選(請參閱 第 8.4.5.10 節,〈舊版模式稽核日誌篩選〉)。
不應記錄事件的帳戶。此值應為
NULL或包含一或多個以逗號分隔的帳戶名稱清單的字串。如需更多資訊,請參閱 第 8.4.5.7 節,〈稽核記錄篩選〉。修改
audit_log_exclude_accounts只會影響修改之後建立的連線,而不會影響現有的連線。 -
命令列格式 --audit-log-file=檔案名稱系統變數 audit_log_file範圍 全域 動態 否 SET_VAR提示適用否 類型 檔案名稱 預設值 audit.log稽核記錄外掛程式將事件寫入的檔案的基底名稱和尾碼。預設值為
audit.log,無論記錄格式為何。若要讓名稱尾碼對應到格式,請明確設定名稱,並選擇不同的尾碼 (例如,XML 格式的audit.xml,JSON 格式的audit.json)。如果
audit_log_file的值是相對路徑名稱,則外掛程式會將其解譯為相對於資料目錄。如果該值是完整路徑名稱,則外掛程式會直接使用該值。如果希望將稽核檔案放在不同的檔案系統或目錄上,則完整路徑名稱可能很有用。基於安全性考量,請將稽核記錄檔寫入只有 MySQL 伺服器和具有合法檢視記錄原因的使用者才能存取的目錄。有關稽核記錄外掛程式如何解譯
audit_log_file值,以及在外掛程式初始化和終止時發生的檔案重新命名規則的詳細資訊,請參閱 稽核記錄檔的命名慣例。稽核記錄外掛程式會使用包含稽核記錄檔的目錄 (從
audit_log_file值決定) 作為搜尋可讀取稽核記錄檔的位置。從這些記錄檔和目前的檔案中,外掛程式會建構一個清單,列出可與稽核記錄書籤和讀取功能一起使用的記錄檔。請參閱 第 8.4.5.6 節,〈讀取稽核記錄檔〉。 -
系統變數 audit_log_filter_id範圍 全域、工作階段 動態 否 SET_VAR提示適用否 類型 整數 預設值 1最小值 0最大值 4294967295此變數的工作階段值表示目前工作階段的稽核篩選器在內部維護的 ID。值為 0 表示工作階段未指派任何篩選器。
-
系統變數 audit_log_flush範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 OFF注意事項audit_log_flush變數已過時;預期在未來版本的 MySQL 中將移除對它的支援。它已由audit_log_rotate()函數取代。如果
audit_log_rotate_on_size為 0,則會停用自動稽核記錄檔輪換,並且只會在手動執行時發生輪換。在這種情況下,將audit_log_flush設定為 1 或ON以啟用它,會導致稽核記錄外掛程式關閉並重新開啟其記錄檔以進行刷新。(變數值保持OFF,因此您不需要明確停用它,就可以再次啟用它以執行另一個刷新。) 如需更多資訊,請參閱 第 8.4.5.5 節,〈設定稽核記錄特性〉。 audit_log_flush_interval_seconds命令列格式 --audit-log-flush-interval-seconds[=值]系統變數 audit_log_flush_interval_seconds範圍 全域 動態 否 SET_VAR提示適用否 類型 不帶正負號的長整數 預設值 0最大值 (Windows) 4294967295最大值 (其他) 18446744073709551615單位 秒 此系統變數取決於
scheduler元件,必須安裝並啟用該元件 (請參閱 第 7.5.5 節,〈排程器元件〉)。若要檢查元件的狀態SHOW VARIABLES LIKE 'component_scheduler%'; +-----------------------------+-------+ | Variable_name | Value | +-----------------------------+-------| | component_scheduler.enabled | On | +-----------------------------+-------+當
audit_log_flush_interval_seconds的值為零 (預設值) 時,即使啟用了scheduler元件 (ON),也不會自動重新整理權限。0到60(1 到 59) 之間的值不會被確認;相反地,這些值會自動調整為60,並且伺服器會發出警告。大於60的值會定義scheduler元件從啟動時,或從上次執行開始,到嘗試排程另一次執行所等待的秒數。若要將此全域系統變數永久儲存到
mysqld-auto.cnf檔案,而不設定全域變數執行階段值,請在變數名稱之前加上PERSIST_ONLY關鍵字或@@PERSIST_ONLY.限定詞。-
命令列格式 --audit-log-format=值系統變數 audit_log_format範圍 全域 動態 否 SET_VAR提示適用否 類型 列舉 預設值 NEW有效值 OLDNEWJSON稽核記錄檔格式。允許的值為
OLD(舊式 XML)、NEW(新式 XML;預設值) 和JSON。有關每種格式的詳細資訊,請參閱 第 8.4.5.4 節,〈稽核記錄檔格式〉。 audit_log_format_unix_timestamp命令列格式 --audit-log-format-unix-timestamp[={OFF|ON}]系統變數 audit_log_format_unix_timestamp範圍 全域 動態 是 SET_VAR提示適用否 類型 布林值 預設值 OFF此變數僅適用於 JSON 格式的稽核記錄輸出。當情況屬實時,啟用此變數會導致每個記錄檔記錄都包含
time欄位。該欄位值是一個整數,表示 UNIX 時間戳記值,指出產生稽核事件的日期和時間。在執行階段變更此變數的值會導致記錄檔輪換,因此,對於給定的 JSON 格式記錄檔,檔案中的所有記錄都包含或不包含
time欄位。設定
audit_log_format_unix_timestamp的執行階段值,除了需要設定全域系統變數執行階段值通常需要的SYSTEM_VARIABLES_ADMIN權限 (或已過時的SUPER權限) 之外,還需要AUDIT_ADMIN權限。-
命令列格式 --audit-log-include-accounts=值已棄用 是 系統變數 audit_log_include_accounts範圍 全域 動態 是 SET_VAR提示適用否 類型 字串 預設值 NULL注意事項此已棄用變數僅適用於舊版模式稽核日誌篩選(請參閱 第 8.4.5.10 節,〈舊版模式稽核日誌篩選〉)。
應記錄事件的帳戶。此值應為
NULL或包含一或多個以逗號分隔的帳戶名稱清單的字串。如需更多資訊,請參閱 第 8.4.5.7 節,〈稽核記錄篩選〉。修改
audit_log_include_accounts只會影響修改之後建立的連線,而不會影響現有的連線。 -
命令列格式 --audit-log-max-size=#系統變數 audit_log_max_size範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 0最小值 0最大值 (Windows) 4294967295最大值 (其他) 18446744073709551615單位 位元組 區塊大小 4096audit_log_max_size與稽核記錄檔修剪相關,僅支援 JSON 格式的記錄檔。它會根據組合記錄檔大小控制修剪。值為 0 (預設值) 會停用基於大小的修剪。不會強制執行大小限制。
大於 0 的值會啟用基於大小的修剪。此值是稽核記錄檔超過此組合大小時會受到修剪的值。
如果您將
audit_log_max_size設定為非 4096 倍數的值,則會將其截斷為最接近的倍數。特別是,將其設定為小於 4096 的值會將其設定為 0,並且不會發生基於大小的修剪。如果
audit_log_max_size和audit_log_rotate_on_size都大於 0,則audit_log_max_size應大於audit_log_rotate_on_size值的 7 倍。否則,會將警告寫入伺服器錯誤記錄檔,因為在這種情況下,基於大小的修剪的 「粒度」可能不足以防止每次發生時移除全部或大部分輪換的記錄檔。注意事項單獨設定
audit_log_max_size不足以導致發生記錄檔修剪,因為修剪演算法會結合使用audit_log_rotate_on_size、audit_log_max_size和audit_log_prune_seconds。如需詳細資訊,請參閱 稽核記錄檔的空間管理。 audit_log_password_history_keep_days命令列格式 --audit-log-password-history-keep-days=#系統變數 audit_log_password_history_keep_days範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 0最小值 0最大值 4294967295單位 天數 稽核日誌外掛程式使用儲存在 MySQL 金鑰環中的加密密碼來實作日誌檔案加密 (請參閱加密稽核日誌檔案)。此外掛程式也實作密碼歷史記錄,其中包含密碼封存和到期 (移除)。
當稽核日誌外掛程式建立新的加密密碼時,會封存先前的密碼 (如果存在) 以供稍後使用。
audit_log_password_history_keep_days變數控制已封存過期密碼的自動移除。其值表示封存的稽核日誌加密密碼在經過多少天後會被移除。預設值 0 會停用密碼到期:密碼保留期限為永久。在下列情況下會建立新的稽核日誌加密密碼
在外掛程式初始化期間,如果外掛程式發現已啟用日誌檔案加密,則會檢查金鑰環是否包含稽核日誌加密密碼。如果沒有,則外掛程式會自動產生隨機的初始加密密碼。
當呼叫
audit_log_encryption_password_set()函數來設定特定密碼時。
在每種情況下,外掛程式都會將新密碼儲存在金鑰環中,並使用它來加密新的日誌檔案。
在下列情況下會移除過期的稽核日誌加密密碼
在外掛程式初始化期間。
當呼叫
audit_log_encryption_password_set()函數時。當
audit_log_password_history_keep_days的執行階段值從目前值變更為大於 0 的值時。執行階段值的變更會發生在使用GLOBAL或PERSIST關鍵字的SET陳述式中,但不會發生在使用PERSIST_ONLY關鍵字的陳述式中。PERSIST_ONLY會將變數設定寫入mysqld-auto.cnf,但對執行階段值沒有影響。
當密碼移除發生時,
audit_log_password_history_keep_days的目前值會決定要移除哪些密碼如果值為 0,則外掛程式不會移除任何密碼。
如果值為
N> 0,則外掛程式會移除超過N天的密碼。
注意事項請注意,不要讓仍需要用於讀取封存加密日誌檔案的舊密碼過期。
如果您通常讓密碼到期停用 (也就是說,
audit_log_password_history_keep_days的值為 0),則可以暫時將變數指派為大於零的值,來執行隨需清除作業。例如,若要讓超過 365 天的密碼過期,請執行下列操作SET GLOBAL audit_log_password_history_keep_days = 365; SET GLOBAL audit_log_password_history_keep_days = 0;設定
audit_log_password_history_keep_days的執行階段值需要AUDIT_ADMIN權限,以及設定全域系統變數執行階段值通常需要的SYSTEM_VARIABLES_ADMIN權限 (或已棄用的SUPER權限)。-
命令列格式 --audit-log-policy=值已棄用 是 系統變數 audit_log_policy範圍 全域 動態 否 SET_VAR提示適用否 類型 列舉 預設值 ALL有效值 ALLLOGINSQUERIESNONE注意事項此已棄用變數僅適用於舊版模式稽核日誌篩選(請參閱 第 8.4.5.10 節,〈舊版模式稽核日誌篩選〉)。
控制稽核日誌外掛程式如何將事件寫入其日誌檔案的原則。下表顯示允許的值。
值 描述 ALL記錄所有事件 LOGINS僅記錄登入事件 QUERIES僅記錄查詢事件 NONE不記錄任何項目 (停用稽核串流) audit_log_policy只能在伺服器啟動時設定。在執行階段,它是唯讀變數。另兩個系統變數audit_log_connection_policy和audit_log_statement_policy可提供更精細的記錄原則控制,而且可以在啟動時或執行階段設定。如果您在啟動時使用audit_log_policy而不是另兩個變數,伺服器會使用其值來設定這些變數。如需原則變數及其互動的詳細資訊,請參閱第 8.4.5.5 節「設定稽核記錄特性」。 -
命令列格式 --audit-log-prune-seconds=#系統變數 audit_log_prune_seconds範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 0最小值 0最大值 (Windows) 4294967295最大值 (其他) 18446744073709551615單位 位元組 audit_log_prune_seconds與稽核日誌檔案修剪有關,這項功能僅支援 JSON 格式的日誌檔案。它會根據日誌檔案的存留時間來控制修剪值 0 (預設值) 會停用以存留時間為基礎的修剪。不會強制執行任何存留時間限制。
大於 0 的值會啟用以存留時間為基礎的修剪。該值是稽核日誌檔案變成可修剪的秒數。
注意事項僅設定
audit_log_prune_seconds不足以導致日誌檔案修剪發生,因為修剪演算法會同時使用audit_log_rotate_on_size、audit_log_max_size和audit_log_prune_seconds。如需詳細資訊,請參閱稽核日誌檔案的空間管理。 -
命令列格式 --audit-log-read-buffer-size=#系統變數 audit_log_read_buffer_size範圍 全域、工作階段 動態 是 SET_VAR提示適用否 類型 整數 預設值 32768最小值 32768最大值 4194304單位 位元組 以位元組為單位,從稽核日誌檔案讀取的緩衝區大小。
audit_log_read()函數讀取的位元組數不會超過此值。僅 JSON 日誌格式支援日誌檔案讀取。如需詳細資訊,請參閱第 8.4.5.6 節「讀取稽核日誌檔案」。此變數的預設值為 32KB,而且可以在執行階段設定。每個用戶端都應該針對其
audit_log_read()的使用情況,適當地設定其audit_log_read_buffer_size的工作階段值。 -
命令列格式 --audit-log-rotate-on-size=#系統變數 audit_log_rotate_on_size範圍 全域 動態 是 SET_VAR提示適用否 類型 整數 預設值 0最小值 0最大值 18446744073709551615單位 位元組 區塊大小 4096如果
audit_log_rotate_on_size為 0,則稽核日誌外掛程式不會執行以大小為基礎的自動日誌檔案輪替。如果想要發生輪替,您必須手動執行;請參閱手動稽核日誌檔案輪替。如果
audit_log_rotate_on_size大於 0,則會發生以大小為基礎的自動日誌檔案輪替。每當寫入日誌檔案導致其大小超過audit_log_rotate_on_size值時,稽核日誌外掛程式會重新命名目前的日誌檔案,並使用原始名稱開啟新的目前日誌檔案。如果您將
audit_log_rotate_on_size設定為不是 4096 倍數的值,則會將其截斷為最接近的倍數。特別是,將其設定為小於 4096 的值會將其設定為 0,而且不會發生輪替,除非手動輪替。注意事項audit_log_rotate_on_size控制是否發生稽核日誌檔案輪替。它也可以與audit_log_max_size和audit_log_prune_seconds搭配使用,以設定輪替的 JSON 格式日誌檔案的修剪。如需詳細資訊,請參閱稽核日誌檔案的空間管理。 -
命令列格式 --audit-log-statement-policy=值已棄用 是 系統變數 audit_log_statement_policy範圍 全域 動態 是 SET_VAR提示適用否 類型 列舉 預設值 ALL有效值 ALLERRORSNONE注意事項此已棄用變數僅適用於舊版模式稽核日誌篩選(請參閱 第 8.4.5.10 節,〈舊版模式稽核日誌篩選〉)。
控制稽核日誌外掛程式如何將陳述式事件寫入其日誌檔案的原則。下表顯示允許的值。
值 描述 ALL記錄所有陳述式事件 ERRORS僅記錄失敗的陳述式事件 NONE不記錄陳述式事件 注意事項在伺服器啟動時,如果也指定了
audit_log_policy,則可能會覆寫為audit_log_statement_policy提供的任何明確值,如第 8.4.5.5 節「設定稽核記錄特性」中所述。 -
命令列格式 --audit-log-strategy=值系統變數 audit_log_strategy範圍 全域 動態 否 SET_VAR提示適用否 類型 列舉 預設值 ASYNCHRONOUS有效值 ASYNCHRONOUSPERFORMANCESEMISYNCHRONOUSSYNCHRONOUS稽核日誌外掛程式使用的記錄方法。允許下列策略值
ASYNCHRONOUS:非同步記錄。等待輸出緩衝區中的空間。PERFORMANCE:非同步記錄。捨棄輸出緩衝區中沒有足夠空間的請求。SEMISYNCHRONOUS:同步記錄。允許作業系統進行快取。SYNCHRONOUS:同步記錄。在每個請求之後呼叫sync()。
如果已啟用稽核日誌外掛程式,它會公開數個提供操作資訊的狀態變數。這些變數可用於舊版模式稽核篩選 (已棄用) 和 JSON 模式稽核篩選。
目前稽核日誌檔案的大小。當有事件寫入日誌時,值會增加;當日誌輪替時,值會重設為 0。
當稽核日誌外掛程式將事件寫入 JSON 格式的稽核日誌時,會使用緩衝區來儲存事件內容,然後才寫入。如果查詢長度大於緩衝區的大小,則外掛程式會將事件直接寫入日誌,略過緩衝區。此變數會顯示直接寫入的次數。外掛程式會根據目前使用的寫入策略來判斷計數 (請參閱
audit_log_strategy)。表 8.45 寫入策略對直接寫入計數的影響
寫入策略 描述 ASYNCHRONOUS如果事件大小不符合內部緩衝區 ( audit_log_buffer_size伺服器系統變數),則會遞增。PERFORMANCE不會遞增。外掛程式會捨棄大於內部緩衝區的事件。 SEMISYNCHRONOUS一律遞增。 SYNCHRONOUS一律遞增。 在效能記錄模式中捨棄的最大事件大小。如需記錄模式的說明,請參閱第 8.4.5.5 節「設定稽核記錄特性」。
稽核日誌外掛程式處理的事件數量,無論是否根據篩選原則將其寫入日誌(請參閱第 8.4.5.5 節, 「設定稽核日誌特性」)。
稽核日誌外掛程式處理的事件數量,這些事件根據篩選原則被篩選(未寫入日誌)(請參閱第 8.4.5.5 節, 「設定稽核日誌特性」)。
在效能日誌模式下,由於事件大於可用的稽核日誌緩衝區空間而遺失的事件數量。此值可用於評估如何設定
audit_log_buffer_size以調整效能模式的緩衝區大小。 有關日誌模式的描述,請參閱第 8.4.5.5 節, 「設定稽核日誌特性」。寫入稽核日誌的事件數量。
寫入所有稽核日誌檔案的事件總大小。與
Audit_log_current_size不同,即使日誌輪換,Audit_log_total_size的值也會增加。在非同步日誌模式下,事件必須等待稽核日誌緩衝區空間的次數。 有關日誌模式的描述,請參閱第 8.4.5.5 節, 「設定稽核日誌特性」。