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


MySQL 8.4 參考手冊  /  ...  /  MySQL Enterprise Firewall 參考

8.4.7.4 MySQL Enterprise Firewall 參考

以下章節提供 MySQL Enterprise Firewall 元素的參考

MySQL Enterprise Firewall 資料表

MySQL Enterprise Firewall 維護每個群組和每個帳戶的設定檔資訊。它使用 firewall 資料庫中的資料表進行持久儲存,並使用 INFORMATION_SCHEMA 或 Performance Schema 資料表來提供記憶體內快取資料的檢視。啟用後,防火牆會根據快取資料做出操作決策。firewall 資料庫可以是 mysql 系統資料庫或自訂結構描述(請參閱安裝 MySQL Enterprise Firewall)。

防火牆群組設定檔資料表

MySQL Enterprise Firewall 使用 firewall 資料庫中的資料表(mysql 或自訂)來維護群組設定檔資訊,以進行持久儲存,並使用 Performance Schema 資料表來提供記憶體內快取資料的檢視。

只有具有SELECT權限的帳戶才能存取每個系統和 Performance Schema 資料表。

預設資料庫.firewall_groups 資料表會列出已註冊的防火牆群組設定檔的名稱和操作模式。資料表具有下列欄(對應的 Performance Schema firewall_groups 資料表具有相似但不一定相同的欄)

  • 名稱

    群組設定檔名稱。

  • 模式

    設定檔的目前操作模式。允許的模式值為 OFFDETECTINGPROTECTINGRECORDING。如需其含義的詳細資訊,請參閱防火牆概念

  • 使用者主機

    群組設定檔的訓練帳戶,當設定檔處於 RECORDING 模式時使用。值為 NULL,或格式為 user_name@host_name 的非 NULL 帳戶。

    • 如果值為 NULL,則防火牆會記錄來自群組中任何成員帳戶的語句允許清單規則。

    • 如果值為非 NULL,則防火牆只會記錄來自指定帳戶(應為群組成員)的語句允許清單規則。

default-database.firewall_group_allowlist 表格列出已註冊防火牆群組設定檔的允許清單規則。此表格包含以下欄位(效能結構描述的 firewall_group_allowlist 表格有類似但不一定相同的欄位)

  • 名稱

    群組設定檔名稱。

  • RULE

    一個標準化的語句,指示設定檔可接受的語句模式。設定檔的允許清單是其規則的聯集。

  • ID

    一個整數欄位,是表格的主索引鍵。

default-database.firewall_membership 表格列出已註冊防火牆群組設定檔的成員(帳戶)。此表格包含以下欄位(效能結構描述的 firewall_membership 表格有類似但不一定相同的欄位)

  • GROUP_ID

    群組設定檔名稱。

  • MEMBER_ID

    屬於設定檔成員的帳戶名稱。

防火牆帳戶設定檔表格

MySQL Enterprise Firewall 使用防火牆資料庫中的表格來維護帳戶設定檔資訊,以進行持久儲存,並使用 INFORMATION_SCHEMA 表格來提供記憶體快取資料的檢視。防火牆資料庫可以是 mysql 系統資料庫或自訂結構描述(請參閱安裝 MySQL Enterprise Firewall)。

每個預設資料庫表格只能由具有該表格 SELECT 權限的帳戶存取。INFORMATION_SCHEMA 表格可由任何人存取。

這些表格已過時,並可能在未來 MySQL 版本中移除。請參閱將帳戶設定檔移轉至群組設定檔

default-database.firewall_users 表格列出已註冊防火牆帳戶設定檔的名稱和操作模式。此表格包含以下欄位(對應的 MYSQL_FIREWALL_USERS 表格有類似但不一定相同的欄位)

  • 使用者主機

    帳戶設定檔名稱。每個帳戶名稱的格式為 user_name@host_name

  • 模式

    設定檔目前的運作模式。允許的模式值為 OFFDETECTINGPROTECTINGRECORDINGRESET。有關其含義的詳細資訊,請參閱防火牆概念

firewall-database.firewall_whitelist 表格列出已註冊防火牆帳戶設定檔的允許清單規則。此表格包含以下欄位(對應的 MYSQL_FIREWALL_WHITELIST 表格有類似但不一定相同的欄位)

  • 使用者主機

    帳戶設定檔名稱。每個帳戶名稱的格式為 user_name@host_name

  • RULE

    一個標準化的語句,指示設定檔可接受的語句模式。設定檔的允許清單是其規則的聯集。

  • ID

    一個整數欄位,是表格的主索引鍵。

MySQL Enterprise Firewall 預存程序

MySQL Enterprise Firewall 預存程序會執行諸如向防火牆註冊設定檔、建立其運作模式,以及管理快取和持久儲存之間防火牆資料傳輸等任務。這些程序會調用提供較低層級任務 API 的管理功能。

防火牆預存程序會在防火牆資料庫中建立。防火牆資料庫可以是 mysql 系統資料庫或自訂結構描述(請參閱安裝 MySQL Enterprise Firewall)。

若要調用防火牆預存程序,請在指定防火牆資料庫為預設資料庫時進行,或者使用資料庫名稱限定程序名稱。例如,如果 mysql 是防火牆資料庫

CALL mysql.sp_set_firewall_group_mode(group, mode);

在 MySQL 8.4 中,防火牆預存程序是交易性的;如果在執行防火牆預存程序時發生錯誤,則會回復到目前為止它所做的所有變更,並報告錯誤。

注意

如果您已在自訂結構描述中安裝 MySQL Enterprise Firewall,請為您的系統進行適當的替換。例如,如果防火牆安裝在 fwdb 結構描述中,則應像這樣執行預存程序

CALL fwdb.sp_set_firewall_group_mode(group, mode);

防火牆群組設定檔預存程序

這些預存程序會在防火牆群組設定檔上執行管理操作

  • sp_firewall_group_delist(group, user)

    此預存程序會從防火牆群組設定檔中移除帳戶。

    如果呼叫成功,則群組成員資格的變更會同時套用至記憶體快取和持久儲存。

    引數

    • group:受影響群組設定檔的名稱。

    • user:要移除的帳戶,格式為 user_name@host_name 的字串。

    範例

    CALL mysql.sp_firewall_group_delist('g', 'fwuser@localhost');
  • sp_firewall_group_enlist(group, user)

    此預存程序會將帳戶新增至防火牆群組設定檔。將帳戶新增至群組之前,不需要向防火牆註冊帳戶本身。

    如果呼叫成功,則群組成員資格的變更會同時套用至記憶體快取和持久儲存。

    引數

    • group:受影響群組設定檔的名稱。

    • user:要新增的帳戶,格式為 user_name@host_name 的字串。

    範例

    CALL mysql.sp_firewall_group_enlist('g', 'fwuser@localhost');
  • sp_reload_firewall_group_rules(group)

    此預存程序提供對個別群組設定檔防火牆操作的控制。此程序使用防火牆管理功能,從儲存在 firewall-database.firewall_group_allowlist 表格中的規則,重新載入群組設定檔的記憶體內規則。

    引數

    • group:受影響群組設定檔的名稱。

    範例

    CALL mysql.sp_reload_firewall_group_rules('myapp');
    警告

    此程序會先清除群組設定檔的記憶體內允許清單規則,然後再從持久儲存中重新載入這些規則,並將設定檔模式設定為 OFF。如果設定檔模式在呼叫 sp_reload_firewall_group_rules() 之前不是 OFF,請使用 sp_set_firewall_group_mode() 在重新載入規則後還原其先前的模式。例如,如果設定檔處於 PROTECTING 模式,則在呼叫 sp_reload_firewall_group_rules() 後就不再如此,您必須明確地將其設定為 PROTECTING

  • sp_set_firewall_group_mode(group, mode)

    此預存程序會建立防火牆群組設定檔的運作模式,如果尚未向防火牆註冊設定檔,則會在註冊後執行。此程序還會視需要調用防火牆管理功能,以在快取和持久儲存之間傳輸防火牆資料。即使 mysql_firewall_mode 系統變數為 OFF,也可以呼叫此程序,但設定設定檔的模式在啟用防火牆之前沒有任何操作效果。

    如果設定檔先前存在,則其任何錄製限制都將保持不變。若要設定或清除限制,請改為呼叫 sp_set_firewall_group_mode_and_user()

    引數

    • group:受影響群組設定檔的名稱。

    • mode:設定檔的運作模式,為字串。允許的模式值為 OFFDETECTINGPROTECTINGRECORDING。有關其含義的詳細資訊,請參閱防火牆概念

    範例

    CALL mysql.sp_set_firewall_group_mode('myapp', 'PROTECTING');
  • sp_set_firewall_group_mode_and_user(group, mode, user)

    此預存程序會向防火牆註冊群組並建立其運作模式,與 sp_set_firewall_group_mode() 類似,但也會指定當群組處於 RECORDING 模式時要使用的訓練帳戶。

    引數

    • group:受影響群組設定檔的名稱。

    • mode:設定檔的運作模式,為字串。允許的模式值為 OFFDETECTINGPROTECTINGRECORDING。有關其含義的詳細資訊,請參閱防火牆概念

    • user:群組設定檔的訓練帳戶,當設定檔處於 RECORDING 模式時使用。值為 NULL,或格式為 user_name@host_name 的非 NULL 帳戶。

      • 如果值為 NULL,則防火牆會記錄來自群組中任何成員帳戶的語句允許清單規則。

      • 如果值為非 NULL,則防火牆只會記錄來自指定帳戶(應為群組成員)的語句允許清單規則。

    範例

    CALL mysql.sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost');
防火牆帳戶設定檔預存程序

這些預存程序會在防火牆帳戶設定檔上執行管理操作

  • sp_reload_firewall_rules(user)

    此預存程序提供對個別帳戶設定檔防火牆操作的控制。此程序使用防火牆管理功能,從儲存在 firewall-database.firewall_whitelist 表格中的規則,重新載入帳戶設定檔的記憶體內規則。

    引數

    • user:受影響帳戶設定檔的名稱,格式為 user_name@host_name 的字串。

    範例

    CALL sp_reload_firewall_rules('fwuser@localhost');
    警告

    此程序會先清除帳戶設定檔的記憶體內允許清單規則,然後再從持久儲存中重新載入這些規則,並將設定檔模式設定為 OFF。如果設定檔模式在呼叫 sp_reload_firewall_rules() 之前不是 OFF,請使用 sp_set_firewall_mode() 在重新載入規則後還原其先前的模式。例如,如果設定檔處於 PROTECTING 模式,則在呼叫 sp_reload_firewall_rules() 後就不再如此,您必須明確地將其設定為 PROTECTING

    此程序已過時,並可能在未來的 MySQL 版本中移除。請參閱將帳戶設定檔遷移至群組設定檔

  • sp_set_firewall_mode(user, mode)

    此預存程序會在將防火牆設定檔註冊到防火牆(如果尚未註冊)後,建立防火牆帳戶設定檔的運作模式。此程序也會根據需要調用防火牆管理功能,以在快取和持續儲存之間傳輸防火牆資料。即使 mysql_firewall_mode 系統變數為 OFF,也可以呼叫此程序,但是設定設定檔的模式在啟用防火牆之前不會有任何運作效果。

    引數

    • user:受影響帳戶設定檔的名稱,格式為 user_name@host_name 的字串。

    • mode:設定檔的運作模式,以字串表示。允許的模式值為 OFFDETECTINGPROTECTINGRECORDINGRESET。有關其含義的詳細資訊,請參閱防火牆概念

    將帳戶設定檔切換到 RECORDING 以外的任何模式,都會將其防火牆快取資料同步到提供持續底層儲存的防火牆資料庫表(mysql 或自訂)。將模式從 OFF 切換為 RECORDING 會將允許清單從 firewall-database.firewall_whitelist 表重新載入到快取中。

    如果帳戶設定檔的允許清單為空,則其模式無法設定為 PROTECTING,因為該設定檔會拒絕每個語句,從而有效地禁止該帳戶執行語句。為響應此類模式設定嘗試,防火牆會產生一則診斷訊息,該訊息會以結果集而不是 SQL 錯誤的形式傳回。

    mysql> CALL sp_set_firewall_mode('a@b','PROTECTING');
    +----------------------------------------------------------------------+
    | set_firewall_mode(arg_userhost, arg_mode)                            |
    +----------------------------------------------------------------------+
    | ERROR: PROTECTING mode requested for a@b but the allowlist is empty. |
    +----------------------------------------------------------------------+

    此程序已過時,並可能在未來的 MySQL 版本中移除。請參閱將帳戶設定檔遷移至群組設定檔

防火牆雜項預存程序

這些預存程序執行各種防火牆管理操作。

  • sp_migrate_firewall_user_to_group(user, group)

    sp_migrate_firewall_user_to_group() 預存程序會將防火牆帳戶設定檔轉換為群組設定檔,並將該帳戶作為其單一加入成員。執行 firewall_profile_migration.sql 腳本以安裝它。轉換程序會在將帳戶設定檔遷移至群組設定檔中討論。

    此常式需要 FIREWALL_ADMIN 權限。

    引數

    • user:要轉換為群組設定檔的帳戶設定檔名稱,格式為 user_name@host_name 的字串。帳戶設定檔必須存在,且目前不得處於 RECORDING 模式。

    • group:新群組設定檔的名稱,不得已存在。新群組設定檔會將指定的帳戶作為其單一加入成員,並且該成員會設定為群組訓練帳戶。群組設定檔的運作模式取自帳戶設定檔的運作模式。

    範例

    CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup);
MySQL Enterprise 防火牆管理功能

MySQL Enterprise 防火牆管理功能為較低層級的任務(例如將防火牆快取與底層系統表同步)提供 API。

在正常運作下,這些功能是由防火牆預存程序調用,而不是由使用者直接調用。 因此,這些功能描述不包含有關其引數和傳回類型等詳細資訊。

防火牆群組設定檔功能

這些功能對防火牆群組設定檔執行管理操作

  • firewall_group_delist(group, user)

    此功能會從群組設定檔中移除帳戶。它需要 FIREWALL_ADMIN 權限。

    範例

    SELECT firewall_group_delist('g', 'fwuser@localhost');
  • firewall_group_enlist(group, user)

    此功能會將帳戶新增至群組設定檔。它需要 FIREWALL_ADMIN 權限。

    在將帳戶新增至群組之前,無需先將帳戶本身註冊到防火牆。

    範例

    SELECT firewall_group_enlist('g', 'fwuser@localhost');
  • read_firewall_group_allowlist(group, rule)

    此彙總函數會透過在 firewall-database.firewall_group_allowlist 表上的 SELECT 陳述式,更新指定群組設定檔的記錄陳述式快取。它需要 FIREWALL_ADMIN 權限。

    範例

    SELECT read_firewall_group_allowlist('my_fw_group', fgw.rule)
    FROM mysql.firewall_group_allowlist AS fgw
    WHERE NAME = 'my_fw_group';
  • read_firewall_groups(group, mode, user)

    此彙總函數會透過在 firewall-database.firewall_groups 表上的 SELECT 陳述式,更新防火牆群組設定檔快取。它需要 FIREWALL_ADMIN 權限。

    範例

    SELECT read_firewall_groups('g', 'RECORDING', 'fwuser@localhost')
    FROM mysql.firewall_groups;
  • set_firewall_group_mode(group, mode[, user])

    此函數會管理群組設定檔快取、建立設定檔運作模式,並選擇性地指定設定檔訓練帳戶。它需要 FIREWALL_ADMIN 權限。

    如果未提供選用的 user 引數,則設定檔的任何先前 user 設定都會保持不變。若要變更設定,請呼叫帶有第三個引數的函數。

    如果提供了選用的 user 引數,則它會指定群組設定檔的訓練帳戶,以在設定檔處於 RECORDING 模式時使用。該值為 NULL,或格式為 user_name@host_name 的非 NULL 帳戶

    • 如果值為 NULL,則防火牆會記錄來自群組中任何成員帳戶的語句允許清單規則。

    • 如果值為非 NULL,則防火牆只會記錄來自指定帳戶(應為群組成員)的語句允許清單規則。

    範例

    SELECT set_firewall_group_mode('g', 'DETECTING');
防火牆帳戶設定檔功能

這些功能對防火牆帳戶設定檔執行管理操作

防火牆雜項功能

這些功能執行各種防火牆操作

MySQL Enterprise 防火牆系統變數

MySQL Enterprise 防火牆支援下列系統變數。使用它們來設定防火牆操作。除非已安裝防火牆,否則這些變數無法使用(請參閱章節 8.4.7.2,「安裝或解除安裝 MySQL Enterprise 防火牆」)。

  • mysql_firewall_database

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

    指定 MySQL Enterprise Firewall 從哪個資料庫讀取資料。一般而言,MYSQL_FIREWALL 伺服器端外掛程式會將其內部資料(表格、預存程序和函數)儲存在 mysql 系統資料庫中,但您可以建立並使用自訂的綱要(請參閱安裝 MySQL Enterprise Firewall)。此變數允許在啟動時指定替代的資料庫名稱。

  • mysql_firewall_mode

    命令列格式 --mysql-firewall-mode[={OFF|ON}]
    系統變數 mysql_firewall_mode
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 布林值
    預設值 ON

    是否啟用(預設)或停用 MySQL Enterprise Firewall。

  • mysql_firewall_reload_interval_seconds

    命令列格式 --mysql-firewall-reload-interval-seconds[=value]
    系統變數 mysql_firewall_reload_interval_seconds
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 整數
    預設值 0
    最小值 60(除非為 0:OFF)
    最大值 INT_MAX
    單位

    指定伺服器端外掛程式用來從防火牆表格重新載入其內部快取的間隔(以秒為單位)。當 mysql_firewall_reload_interval_seconds 的值為零(預設值)時,在執行階段不會定期從表格重新載入資料。外掛程式不會確認 060(1 到 59)之間的值。相反地,這些值會自動調整為 60

    此變數要求啟用 scheduler 元件(ON)。如需詳細資訊,請參閱排程防火牆快取重新載入

  • mysql_firewall_trace

    命令列格式 --mysql-firewall-trace[={OFF|ON}]
    系統變數 mysql_firewall_trace
    範圍 全域
    動態
    SET_VAR 提示適用
    類型 布林值
    預設值 OFF

    是否啟用或停用(預設)MySQL Enterprise Firewall 追蹤。當啟用 mysql_firewall_trace 時,對於 PROTECTING 模式,防火牆會將拒絕的陳述式寫入錯誤日誌。

MySQL Enterprise Firewall 狀態變數

MySQL Enterprise Firewall 支援下列狀態變數。使用它們可取得有關防火牆運作狀態的資訊。除非安裝防火牆(請參閱第 8.4.7.2 節,「安裝或解除安裝 MySQL Enterprise Firewall」),否則這些變數不可用。每當安裝 MYSQL_FIREWALL 外掛程式或啟動伺服器時,防火牆狀態變數都會設定為 0。mysql_firewall_flush_status() 函數(請參閱MySQL Enterprise Firewall 管理函數)會將許多變數重設為零。