文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
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@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 表格,以判斷現有哪些稽核日誌金鑰環 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(),以強制重新載入所有篩選器。否則,應避免使用此函數。實際上,它相當於簡化版的卸載和重新載入 audit_log 外掛程式,使用 UNINSTALL PLUGININSTALL 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                                                         |
    +------------------------------------------------------------+
  • 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 8.4 之前,字串傳回值可能是二進位 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 8.4 之前,字串傳回值可能是二進位 JSON 字串。如需將這類值轉換為非二進位字串的資訊,請參閱 第 8.4.5.6 節,〈讀取稽核日誌檔案〉

  • audit_log_rotate()

    引數

    無。

    傳回值

    重新命名的檔案名稱。

    範例

    mysql> SELECT audit_log_rotate();

    使用 audit_log_rotate() 需要 AUDIT_ADMIN 權限。

稽核日誌選項和變數參考

表 8.44 稽核日誌選項和變數參考

名稱 命令列 選項檔案 系統變數 狀態變數 變數範圍 動態
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_disable 全域
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=值
    系統變數 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 的執行階段值,除了需要設定全域系統變數執行階段值通常需要的 SYSTEM_VARIABLES_ADMIN 權限 (或已過時的 SUPER 權限) 之外,還需要 AUDIT_ADMIN 權限。

  • 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 的執行階段值需要 AUDIT_ADMIN 權限,以及設定全域系統變數執行階段值通常需要的 SYSTEM_VARIABLES_ADMIN 權限 (或已棄用的 SUPER 權限)。

  • audit_log_policy

    命令列格式 --audit-log-policy=值
    已棄用
    系統變數 audit_log_policy
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 列舉
    預設值 ALL
    有效值

    ALL

    LOGINS

    QUERIES

    NONE

    注意事項

    此已棄用變數僅適用於舊版模式稽核日誌篩選(請參閱 第 8.4.5.10 節,〈舊版模式稽核日誌篩選〉)。

    控制稽核日誌外掛程式如何將事件寫入其日誌檔案的原則。下表顯示允許的值。

    描述
    ALL 記錄所有事件
    LOGINS 僅記錄登入事件
    QUERIES 僅記錄查詢事件
    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 提示適用
    類型 列舉
    預設值 ASYNCHRONOUS
    有效值

    ASYNCHRONOUS

    PERFORMANCE

    SEMISYNCHRONOUS

    SYNCHRONOUS

    稽核日誌外掛程式使用的記錄方法。允許下列策略值

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

    • PERFORMANCE:非同步記錄。捨棄輸出緩衝區中沒有足夠空間的請求。

    • SEMISYNCHRONOUS:同步記錄。允許作業系統進行快取。

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

稽核日誌狀態變數

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