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


8.4.5.11 稽核日誌參考

以下章節提供 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@localhostUSER 部分為 user1

  • HOST

    帳戶的主機名稱部分。對於帳戶 user1@localhostHOST 部分為 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 資料表來確定存在哪些稽核日誌金鑰環 ID

    mysql> 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                                           |
    +---------------------------------------------+
  • audit_log_filter_flush()

    呼叫任何其他篩選函數會立即影響操作稽核日誌篩選,並更新稽核日誌表格。如果改為使用諸如 INSERTUPDATEDELETE 等陳述式直接修改這些表格的內容,則變更不會立即影響篩選。若要刷新您的變更並使其生效,請呼叫 audit_log_filter_flush()

    警告

    僅在直接修改稽核表格後,才應使用 audit_log_filter_flush() 來強制重新載入所有篩選。否則,應避免使用此函數。實際上,它是使用 UNINSTALL PLUGININSTALL 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                                                         |
    +------------------------------------------------------------+
  • audit_log_read([arg])

    讀取稽核日誌並傳回 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" }
    • timestampid:要讀取的第一個事件在稽核記錄中的位置。timestampid 項目共同構成一個書籤,可唯一識別特定事件。若 audit_log_read() 引數包含任一項目,則必須同時包含兩者,才能完整指定位置,否則會發生錯誤。

    • max_array_length:要從記錄讀取的最大事件數。若省略此項目,預設為讀取到記錄結尾或讀取緩衝區滿為止,以先到者為準。

    若要指定 audit_log_read() 的起始位置,請傳遞包含 start 項目或由 timestampid 項目組成的書籤的雜湊引數。若雜湊引數同時包含 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 節,「讀取稽核記錄檔」

  • audit_log_read_bookmark()

    傳回代表最近寫入的稽核記錄事件之書籤的 JSON 字串。若稽核記錄格式不是 JSON,則會發生錯誤。

    書籤是一個包含 timestampid 項目之 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 節,「讀取稽核記錄檔」

  • audit_log_rotate()

    引數

    無。

    傳回值

    重新命名的檔案名稱。

    範例

    mysql> SELECT audit_log_rotate();

    使用 audit_log_rotate() 需要 AUDIT_ADMIN 權限。

稽核記錄選項和變數參考

表 8.43:稽核記錄選項和變數參考

名稱 命令列 選項檔案 系統變數 狀態變數 變數範圍 動態
audit-log
audit_log_buffer_size 全域
audit_log_compression 全域
audit_log_connection_policy 全域
audit_log_current_session 兩者
Audit_log_current_size 全域
audit_log_database 全域
Audit_log_direct_writes 全域
audit_log_encryption 全域
Audit_log_event_max_drop_size 全域
Audit_log_events 全域
Audit_log_events_filtered 全域
Audit_log_events_lost 全域
Audit_log_events_written 全域
audit_log_exclude_accounts 全域
audit_log_file 全域
audit_log_filter_id 兩者
audit_log_flush 全域
audit_log_flush_interval_seconds 全域
audit_log_format 全域
audit_log_include_accounts 全域
audit_log_max_size 全域
audit_log_password_history_keep_days 全域
audit_log_policy 全域
audit_log_prune_seconds 全域
audit_log_read_buffer_size 兩者
audit_log_rotate_on_size 全域
audit_log_statement_policy 全域
audit_log_strategy 全域
Audit_log_total_size 全域
Audit_log_write_waits 全域

稽核記錄選項和變數

本節說明用於設定 MySQL Enterprise Audit 運作的命令選項和系統變數。若在啟動時指定的值不正確,則 audit_log 外掛程式可能無法正確初始化,且伺服器不會載入它。在此情況下,伺服器也可能會針對其他稽核記錄設定產生錯誤訊息,因為它無法識別這些設定。

若要設定稽核記錄外掛程式的啟用,請使用此選項:

若啟用稽核記錄外掛程式,它會公開多個系統變數,允許控制記錄功能:

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=#
    系統變數 audit_log_buffer_size
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 整數
    預設值 1048576
    最小值 4096
    最大值 (64 位元平台) 18446744073709547520
    最大值 (32 位元平台) 4294967295
    單位 位元組
    區塊大小 4096

    當稽核記錄外掛程式以非同步方式將事件寫入記錄時,它會使用緩衝區在寫入之前儲存事件內容。此變數控制該緩衝區的大小,以位元組為單位。伺服器會將值調整為 4096 的倍數。此外掛程式會使用單一緩衝區,它會在初始化時配置,並在終止時移除。僅當記錄為非同步時,此外掛程式才會配置此緩衝區。

  • audit_log_compression

    命令列格式 --audit-log-compression=value
    系統變數 audit_log_compression
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 列舉
    預設值 NONE
    有效值

    NONE

    GZIP

    稽核記錄檔的壓縮類型。允許的值為 NONE (不壓縮;預設) 和 GZIP (GNU Zip 壓縮)。如需更多資訊,請參閱壓縮稽核記錄檔

  • audit_log_connection_policy

    命令列格式 --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

    系統變數 audit_log_current_session
    範圍 全域、工作階段
    動態
    SET_VAR 提示適用
    類型 布林值
    預設值 取決於篩選原則

    是否針對目前工作階段啟用稽核記錄。此變數的工作階段值為唯讀。它在工作階段開始時根據 audit_log_include_accountsaudit_log_exclude_accounts 系統變數的值設定。稽核記錄外掛程式會使用工作階段值來判斷是否稽核工作階段的事件。(有一個全域值,但此外掛程式不會使用它。)

  • audit_log_database

    命令列格式 --audit-log-database=value
    系統變數 audit_log_database
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 字串
    預設值 mysql

    指定 audit_log 外掛程式用於尋找其資料表的資料庫。此變數為唯讀。如需更多資訊,請參閱第 8.4.5.2 節,「安裝或解除安裝 MySQL Enterprise Audit」

  • audit_log_disable

    命令列格式 --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=值
    系統變數 audit_log_encryption
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 列舉
    預設值 NONE
    有效值

    NONE

    AES

    稽核日誌檔的加密類型。允許的值為 NONE (不加密,預設值) 和 AES (AES-256-CBC 加密)。如需詳細資訊,請參閱加密稽核日誌檔

  • audit_log_exclude_accounts

    命令列格式 --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=檔案名稱
    系統變數 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

    系統變數 audit_log_filter_id
    範圍 全域、工作階段
    動態
    SET_VAR 提示適用
    類型 整數
    預設值 1
    最小值 0
    最大值 4294967295

    此變數的會期值表示目前會期的稽核篩選器內部維護的 ID。值為 0 表示會期未指派任何篩選器。

  • audit_log_flush

    系統變數 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),也不會自動重新整理權限。

    不承認介於 060 (1 到 59) 之間的值;相反地,這些值會自動調整為 60,且伺服器會發出警告。大於 60 的值會定義 scheduler 元件從啟動或從上一次執行開始,直到嘗試排程另一次執行所等待的秒數。

    若要在不設定全域變數執行階段值的情況下,將此全域系統變數保存到 mysqld-auto.cnf 檔案中,請在變數名稱前面加上 PERSIST_ONLY 關鍵字或 @@PERSIST_ONLY. 限定詞。

  • audit_log_format

    命令列格式 --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=值
    已棄用
    系統變數 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=#
    系統變數 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_sizeaudit_log_rotate_on_size 都大於 0,則 audit_log_max_size 應大於 audit_log_rotate_on_size 值的 7 倍。否則,會將警告寫入伺服器錯誤日誌,因為在這種情況下,基於大小的修剪的粒度可能不足以防止每次發生時移除所有或大部分已輪換的日誌檔。

    注意

    單獨設定 audit_log_max_size 不足以導致發生日誌檔修剪,因為修剪演算法會結合使用 audit_log_rotate_on_sizeaudit_log_max_sizeaudit_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 的值時。執行期值的變更會發生在使用 GLOBALPERSIST 關鍵字的 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=值
    已棄用
    系統變數 audit_log_policy
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 列舉
    預設值 ALL
    有效值

    ALL

    登入

    查詢

    NONE

    注意

    此已棄用的變數僅適用於舊版模式稽核記錄篩選 (請參閱第 8.4.5.10 節,「舊版模式稽核記錄篩選」)。

    控制稽核日誌插件如何將事件寫入其日誌檔案的策略。下表顯示允許的值。

    描述
    ALL 記錄所有事件
    登入 僅記錄登入事件
    查詢 僅記錄查詢事件
    NONE 不記錄任何內容(停用稽核串流)

    audit_log_policy 只能在伺服器啟動時設定。在執行期間,它是唯讀變數。另外兩個系統變數 audit_log_connection_policyaudit_log_statement_policy 提供對記錄策略更精細的控制,可以在啟動時或執行期間設定。如果您在啟動時使用 audit_log_policy 而不是其他兩個變數,伺服器會使用其值來設定這些變數。如需有關策略變數及其互動的詳細資訊,請參閱第 8.4.5.5 節〈設定稽核記錄特性〉

  • audit_log_prune_seconds

    命令列格式 --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_sizeaudit_log_max_sizeaudit_log_prune_seconds。如需詳細資訊,請參閱稽核日誌檔案的空間管理

  • audit_log_read_buffer_size

    命令列格式 --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=#
    系統變數 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_sizeaudit_log_prune_seconds 一起使用,以設定輪替的 JSON 格式日誌檔案的修剪。如需詳細資訊,請參閱稽核日誌檔案的空間管理

  • audit_log_statement_policy

    命令列格式 --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=值
    系統變數 audit_log_strategy
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 列舉
    預設值 非同步
    有效值

    非同步

    效能

    半同步

    同步

    稽核日誌插件使用的記錄方法。允許使用下列策略值

    • 非同步:非同步記錄。等待輸出緩衝區中的空間。

    • 效能:非同步記錄。捨棄輸出緩衝區中空間不足的請求。

    • 半同步:同步記錄。允許作業系統快取。

    • 同步:同步記錄。在每個請求後呼叫 sync()

稽核日誌狀態變數

如果已啟用稽核日誌插件,它會公開多個提供操作資訊的狀態變數。這些變數可用於舊版模式稽核篩選(已棄用)和 JSON 模式稽核篩選。