以下章節提供 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()
來強制重新載入所有篩選。否則,應避免使用此函數。實際上,它是使用UNINSTALL PLUGIN
和INSTALL PLUGIN
卸載和重新載入audit_log
外掛程式的簡化版本。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
雜湊表示的事件,但最後一個元素可能是JSON
null
值,表示沒有可讀取的後續事件。使用由
JSON
null
值組成的引數,audit_log_read()
會關閉目前的讀取序列。如需有關稽核日誌讀取程序的其他詳細資訊,請參閱第 8.4.5.6 節,「讀取稽核日誌檔案」。
引數
若要取得最近寫入事件的書籤,請呼叫
audit_log_read_bookmark()
。arg
:此引數為選用。若省略,此函式會從目前位置讀取事件。若存在,引數可以是JSON
null
值以關閉讀取序列,或是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
字串,或是若將JSON
null
值作為引數傳遞以關閉讀取序列,則傳回值為JSON
null
值。若呼叫失敗,則傳回值為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 9.0 之前,字串傳回值可能為二進位
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 9.0 之前,字串傳回值可能為二進位
JSON
字串。有關將此類值轉換為非二進位字串的資訊,請參閱第 8.4.5.6 節,「讀取稽核記錄檔」。引數
無。
傳回值
重新命名的檔案名稱。
範例
mysql> SELECT audit_log_rotate();
使用
audit_log_rotate()
需要AUDIT_ADMIN
權限。
表 8.43:稽核記錄選項和變數參考
本節說明用於設定 MySQL Enterprise Audit 運作的命令選項和系統變數。若在啟動時指定的值不正確,則 audit_log
外掛程式可能無法正確初始化,且伺服器不會載入它。在此情況下,伺服器也可能會針對其他稽核記錄設定產生錯誤訊息,因為它無法識別這些設定。
若要設定稽核記錄外掛程式的啟用,請使用此選項:
-
命令列格式 --audit-log[=value]
類型 列舉 預設值 ON
有效值 ON
OFF
FORCE
FORCE_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
有效值 NONE
GZIP
稽核記錄檔的壓縮類型。允許的值為
NONE
(不壓縮;預設) 和GZIP
(GNU Zip 壓縮)。如需更多資訊,請參閱壓縮稽核記錄檔。 -
命令列格式 --audit-log-connection-policy=value
已棄用 是 系統變數 audit_log_connection_policy
範圍 全域 動態 是 SET_VAR
提示適用否 類型 列舉 預設值 ALL
有效值 ALL
ERRORS
NONE
注意此已棄用的變數僅適用於舊版模式稽核記錄篩選 (請參閱第 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=value
系統變數 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
有效值 NONE
AES
稽核日誌檔的加密類型。允許的值為
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
有效值 OLD
NEW
JSON
稽核日誌檔格式。允許的值為
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
的執行階段值需要AUDIT_ADMIN
權限,以及通常需要設定全域系統變數執行階段值的SYSTEM_VARIABLES_ADMIN
權限 (或已棄用的SUPER
權限)。-
命令列格式 --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
單位 位元組 區塊大小 4096
audit_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
的執行期值,除了設定全域系統變數執行期值通常需要的SYSTEM_VARIABLES_ADMIN
權限(或已棄用的SUPER
權限)之外,還需要AUDIT_ADMIN
權限。-
命令列格式 --audit-log-policy=值
已棄用 是 系統變數 audit_log_policy
範圍 全域 動態 否 SET_VAR
提示適用否 類型 列舉 預設值 ALL
有效值 ALL
登入
查詢
NONE
注意此已棄用的變數僅適用於舊版模式稽核記錄篩選 (請參閱第 8.4.5.10 節,「舊版模式稽核記錄篩選」)。
控制稽核日誌插件如何將事件寫入其日誌檔案的策略。下表顯示允許的值。
值 描述 ALL
記錄所有事件 登入
僅記錄登入事件 查詢
僅記錄查詢事件 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
有效值 ALL
ERRORS
NONE
注意此已棄用的變數僅適用於舊版模式稽核記錄篩選 (請參閱第 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
提示適用否 類型 列舉 預設值 非同步
有效值 非同步
效能
半同步
同步
稽核日誌插件使用的記錄方法。允許使用下列策略值
非同步
:非同步記錄。等待輸出緩衝區中的空間。效能
:非同步記錄。捨棄輸出緩衝區中空間不足的請求。半同步
:同步記錄。允許作業系統快取。同步
:同步記錄。在每個請求後呼叫sync()
。
如果已啟用稽核日誌插件,它會公開多個提供操作資訊的狀態變數。這些變數可用於舊版模式稽核篩選(已棄用)和 JSON 模式稽核篩選。
目前稽核日誌檔案的大小。當事件寫入日誌時,該值會增加,並且在日誌輪替時重設為 0。
當稽核日誌插件將事件寫入 JSON 格式的稽核日誌時,它會使用緩衝區來儲存事件內容,然後再寫入它們。如果查詢長度大於緩衝區的大小,則插件會將事件直接寫入日誌,繞過緩衝區。此變數會顯示直接寫入的次數。插件會根據目前使用的寫入策略來判斷計數(請參閱
audit_log_strategy
)。表 8.44 寫入策略對直接寫入計數的影響
寫入策略 描述 非同步
如果事件大小不符合內部緩衝區( audit_log_buffer_size
伺服器系統變數),則會遞增。效能
不會遞增。插件會捨棄大於內部緩衝區的事件。 半同步
一律遞增。 同步
一律遞增。 效能記錄模式中,最大捨棄事件的大小。關於記錄模式的描述,請參閱第 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 節「設定稽核記錄特性」。