以下章節提供 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 資料表。
資料表會列出已註冊的防火牆群組設定檔的名稱和操作模式。資料表具有下列欄(對應的 Performance Schema 預設資料庫
.firewall_groupsfirewall_groups
資料表具有相似但不一定相同的欄)
名稱
群組設定檔名稱。
模式
設定檔的目前操作模式。允許的模式值為
OFF
、DETECTING
、PROTECTING
和RECORDING
。如需其含義的詳細資訊,請參閱防火牆概念。使用者主機
群組設定檔的訓練帳戶,當設定檔處於
RECORDING
模式時使用。值為NULL
,或格式為
的非user_name
@host_name
NULL
帳戶。如果值為
NULL
,則防火牆會記錄來自群組中任何成員帳戶的語句允許清單規則。如果值為非
NULL
,則防火牆只會記錄來自指定帳戶(應為群組成員)的語句允許清單規則。
表格列出已註冊防火牆群組設定檔的允許清單規則。此表格包含以下欄位(效能結構描述的 default-database
.firewall_group_allowlistfirewall_group_allowlist
表格有類似但不一定相同的欄位)
名稱
群組設定檔名稱。
RULE
一個標準化的語句,指示設定檔可接受的語句模式。設定檔的允許清單是其規則的聯集。
ID
一個整數欄位,是表格的主索引鍵。
表格列出已註冊防火牆群組設定檔的成員(帳戶)。此表格包含以下欄位(效能結構描述的 default-database
.firewall_membershipfirewall_membership
表格有類似但不一定相同的欄位)
GROUP_ID
群組設定檔名稱。
MEMBER_ID
屬於設定檔成員的帳戶名稱。
防火牆帳戶設定檔表格
MySQL Enterprise Firewall 使用防火牆資料庫中的表格來維護帳戶設定檔資訊,以進行持久儲存,並使用 INFORMATION_SCHEMA
表格來提供記憶體快取資料的檢視。防火牆資料庫可以是 mysql
系統資料庫或自訂結構描述(請參閱安裝 MySQL Enterprise Firewall)。
每個預設資料庫表格只能由具有該表格 SELECT
權限的帳戶存取。INFORMATION_SCHEMA
表格可由任何人存取。
這些表格已過時,並可能在未來 MySQL 版本中移除。請參閱將帳戶設定檔移轉至群組設定檔。
表格列出已註冊防火牆帳戶設定檔的名稱和操作模式。此表格包含以下欄位(對應的 default-database
.firewall_usersMYSQL_FIREWALL_USERS
表格有類似但不一定相同的欄位)
使用者主機
帳戶設定檔名稱。每個帳戶名稱的格式為
。user_name
@host_name
模式
設定檔目前的運作模式。允許的模式值為
OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。有關其含義的詳細資訊,請參閱防火牆概念。
表格列出已註冊防火牆帳戶設定檔的允許清單規則。此表格包含以下欄位(對應的 firewall-database
.firewall_whitelistMYSQL_FIREWALL_WHITELIST
表格有類似但不一定相同的欄位)
使用者主機
帳戶設定檔名稱。每個帳戶名稱的格式為
。user_name
@host_name
RULE
一個標準化的語句,指示設定檔可接受的語句模式。設定檔的允許清單是其規則的聯集。
ID
一個整數欄位,是表格的主索引鍵。
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
:設定檔的運作模式,為字串。允許的模式值為OFF
、DETECTING
、PROTECTING
和RECORDING
。有關其含義的詳細資訊,請參閱防火牆概念。
範例
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
:設定檔的運作模式,為字串。允許的模式值為OFF
、DETECTING
、PROTECTING
和RECORDING
。有關其含義的詳細資訊,請參閱防火牆概念。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
:設定檔的運作模式,以字串表示。允許的模式值為OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。有關其含義的詳細資訊,請參閱防火牆概念。
將帳戶設定檔切換到
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 防火牆管理功能為較低層級的任務(例如將防火牆快取與底層系統表同步)提供 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_allowlistSELECT
陳述式,更新指定群組設定檔的記錄陳述式快取。它需要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_groupsSELECT
陳述式,更新防火牆群組設定檔快取。它需要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');
防火牆帳戶設定檔功能
這些功能對防火牆帳戶設定檔執行管理操作
read_firewall_users(
user
,mode
)此彙總函數會透過在
表上的firewall-database
.firewall_usersSELECT
陳述式,更新防火牆帳戶設定檔快取。它需要FIREWALL_ADMIN
權限或已過時的SUPER
權限。範例
SELECT read_firewall_users('fwuser@localhost', 'RECORDING') FROM mysql.firewall_users;
此函數已過時,並可能在未來的 MySQL 版本中移除。請參閱將帳戶設定檔遷移至群組設定檔。
read_firewall_whitelist(
user
,rule
)此彙總函數會透過在
表上的firewall-database
.firewall_whitelistSELECT
陳述式,更新指定帳戶設定檔的記錄陳述式快取。它需要FIREWALL_ADMIN
權限或已過時的SUPER
權限。範例
SELECT read_firewall_whitelist('fwuser@localhost', fw.rule) FROM mysql.firewall_whitelist AS fw WHERE USERHOST = 'fwuser@localhost';
此函數已過時,並可能在未來的 MySQL 版本中移除。請參閱將帳戶設定檔遷移至群組設定檔。
此函數會管理帳戶設定檔快取,並建立設定檔運作模式。它需要
FIREWALL_ADMIN
權限或已過時的SUPER
權限。範例
SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');
此函數已過時,並可能在未來的 MySQL 版本中移除。請參閱將帳戶設定檔遷移至群組設定檔。
防火牆雜項功能
這些功能執行各種防火牆操作
此函數會將數個防火牆狀態變數重設為 0
此函數需要
FIREWALL_ADMIN
權限或已過時的SUPER
權限。範例
SELECT mysql_firewall_flush_status();
此函數會將 SQL 陳述式正規化為用於允許清單規則的摘要形式。它需要
FIREWALL_ADMIN
權限或已過時的SUPER
權限。範例
SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');
注意相同的摘要功能可以在防火牆環境之外使用
STATEMENT_DIGEST_TEXT()
SQL 函數。
MySQL Enterprise 防火牆支援下列系統變數。使用它們來設定防火牆操作。除非已安裝防火牆,否則這些變數無法使用(請參閱章節 8.4.7.2,「安裝或解除安裝 MySQL Enterprise 防火牆」)。
-
命令列格式 --mysql-firewall-database[=value]
系統變數 mysql_firewall_database
範圍 全域 動態 否 SET_VAR
提示適用否 類型 字串 預設值 mysql
指定 MySQL Enterprise Firewall 從哪個資料庫讀取資料。一般而言,
MYSQL_FIREWALL
伺服器端外掛程式會將其內部資料(表格、預存程序和函數)儲存在mysql
系統資料庫中,但您可以建立並使用自訂的綱要(請參閱安裝 MySQL Enterprise Firewall)。此變數允許在啟動時指定替代的資料庫名稱。 -
命令列格式 --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
的值為零(預設值)時,在執行階段不會定期從表格重新載入資料。外掛程式不會確認0
到60
(1 到 59)之間的值。相反地,這些值會自動調整為60
。此變數要求啟用
scheduler
元件(ON
)。如需詳細資訊,請參閱排程防火牆快取重新載入。-
命令列格式 --mysql-firewall-trace[={OFF|ON}]
系統變數 mysql_firewall_trace
範圍 全域 動態 是 SET_VAR
提示適用否 類型 布林值 預設值 OFF
是否啟用或停用(預設)MySQL Enterprise Firewall 追蹤。當啟用
mysql_firewall_trace
時,對於PROTECTING
模式,防火牆會將拒絕的陳述式寫入錯誤日誌。
MySQL Enterprise Firewall 支援下列狀態變數。使用它們可取得有關防火牆運作狀態的資訊。除非安裝防火牆(請參閱第 8.4.7.2 節,「安裝或解除安裝 MySQL Enterprise Firewall」),否則這些變數不可用。每當安裝 MYSQL_FIREWALL
外掛程式或啟動伺服器時,防火牆狀態變數都會設定為 0。mysql_firewall_flush_status()
函數(請參閱MySQL Enterprise Firewall 管理函數)會將許多變數重設為零。