以下章節提供 MySQL Enterprise Firewall 元素的參考
MySQL Enterprise Firewall 會以每個群組和每個帳戶為基礎維護設定檔資訊。它使用防火牆資料庫中的表格進行持久性儲存,並使用 INFORMATION_SCHEMA
或 Performance Schema 表格來提供記憶體內快取資料的檢視。啟用後,防火牆會以快取資料為依據來做出操作決策。防火牆資料庫可以是 mysql
系統資料庫或自訂綱要 (請參閱安裝 MySQL Enterprise Firewall)。
防火牆群組設定檔表格
MySQL Enterprise Firewall 使用防火牆資料庫 ( mysql
或自訂) 中的表格來維護群組設定檔資訊,以進行持久性儲存,並使用 Performance Schema 表格來提供記憶體內快取資料的檢視。
每個系統和 Performance Schema 表格僅可由擁有其 SELECT
權限的帳戶存取。
表格列出已註冊的防火牆群組設定檔的名稱和運作模式。此表格包含以下欄位 (對應的 Performance Schema 預設資料庫
.firewall_groupsfirewall_groups
表格具有相似但不一定相同的欄位)
名稱 (NAME)
群組設定檔的名稱。
模式 (MODE)
設定檔目前的運作模式。允許的模式值為
OFF
、DETECTING
、PROTECTING
和RECORDING
。關於這些模式意義的詳細資訊,請參閱 防火牆概念。使用者主機 (USERHOST)
群組設定檔的訓練帳戶,當設定檔處於
RECORDING
模式時使用。此值為NULL
,或格式為
的非使用者名稱
@主機名稱
NULL
帳戶。如果值為
NULL
,則防火牆會記錄來自任何屬於該群組的帳戶的陳述式允許清單規則。如果值為非
NULL
,則防火牆只會記錄來自指定帳戶(應為群組成員)的陳述式允許清單規則。
表格列出已註冊的防火牆群組設定檔的允許清單規則。此表格包含以下欄位 (對應的 Performance Schema 預設資料庫
.firewall_group_allowlistfirewall_group_allowlist
表格具有相似但不一定相同的欄位)
名稱 (NAME)
群組設定檔的名稱。
規則 (RULE)
一個標準化的陳述式,表示該設定檔可接受的陳述式模式。設定檔允許清單是其規則的聯集。
ID
一個整數欄位,是表格的主索引鍵。
表格列出已註冊的防火牆群組設定檔的成員 (帳戶)。此表格包含以下欄位 (對應的 Performance Schema 預設資料庫
.firewall_membershipfirewall_membership
表格具有相似但不一定相同的欄位)
群組 ID (GROUP_ID)
群組設定檔的名稱。
成員 ID (MEMBER_ID)
屬於該設定檔成員的帳戶名稱。
防火牆帳戶設定檔表格
MySQL Enterprise Firewall 使用防火牆資料庫中的表格來維護帳戶設定檔資訊,以進行持久性儲存,並使用 INFORMATION_SCHEMA
表格來提供對記憶體中快取資料的檢視。防火牆資料庫可以是 mysql
系統資料庫或自訂綱要 (請參閱 安裝 MySQL Enterprise Firewall)。
每個預設資料庫表格僅可由具有該表格的 SELECT
權限的帳戶存取。INFORMATION_SCHEMA
表格可由任何人存取。
這些表格已被棄用,並可能在未來的 MySQL 版本中移除。請參閱 將帳戶設定檔移轉至群組設定檔。
表格列出已註冊的防火牆帳戶設定檔的名稱和運作模式。此表格包含以下欄位 (對應的 預設資料庫
.firewall_usersMYSQL_FIREWALL_USERS
表格具有相似但不一定相同的欄位)
使用者主機 (USERHOST)
帳戶設定檔名稱。每個帳戶名稱的格式為
。使用者名稱
@主機名稱
模式 (MODE)
設定檔目前的運作模式。允許的模式值為
OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。關於這些模式意義的詳細資訊,請參閱 防火牆概念。
表格列出已註冊的防火牆帳戶設定檔的允許清單規則。此表格包含以下欄位 (對應的 防火牆資料庫
.firewall_whitelistMYSQL_FIREWALL_WHITELIST
表格具有相似但不一定相同的欄位)
使用者主機 (USERHOST)
帳戶設定檔名稱。每個帳戶名稱的格式為
。使用者名稱
@主機名稱
規則 (RULE)
一個標準化的陳述式,表示該設定檔可接受的陳述式模式。設定檔允許清單是其規則的聯集。
ID
一個整數欄位,是表格的主索引鍵。
MySQL Enterprise Firewall 預存程序會執行諸如向防火牆註冊設定檔、建立其運作模式以及管理快取和持久性儲存之間防火牆資料傳輸等工作。這些程序會呼叫管理功能,這些功能提供用於較低層級工作的 API。
防火牆預存程序是在防火牆資料庫中建立的。防火牆資料庫可以是 mysql
系統資料庫或自訂綱要 (請參閱 安裝 MySQL Enterprise Firewall)。
若要呼叫防火牆預存程序,請在指定的防火牆資料庫是預設資料庫時執行呼叫,或使用資料庫名稱限定程序名稱。例如,如果 mysql
是防火牆資料庫
CALL mysql.sp_set_firewall_group_mode(group, mode);
在 MySQL 9.0 中,防火牆預存程序是交易式的;如果在執行防火牆預存程序期間發生錯誤,則會復原到該點為止所做的所有變更,並報告錯誤。
如果您已在自訂綱要中安裝 MySQL Enterprise Firewall,請針對您的系統進行適當的替換。例如,如果防火牆安裝在 fwdb
綱要中,則像這樣執行預存程序
CALL fwdb.sp_set_firewall_group_mode(group, mode);
防火牆群組設定檔預存程序
這些預存程序會對防火牆群組設定檔執行管理作業
sp_firewall_group_delist(
群組
,使用者
)此預存程序會從防火牆群組設定檔中移除帳戶。
如果呼叫成功,則會對記憶體中快取和持久性儲存進行群組成員資格的變更。
引數
群組
:受影響群組設定檔的名稱。使用者
:要移除的帳戶,格式為
字串。使用者名稱
@主機名稱
範例
CALL mysql.sp_firewall_group_delist('g', 'fwuser@localhost');
sp_firewall_group_enlist(
群組
,使用者
)此預存程序會將帳戶新增至防火牆群組設定檔。在將帳戶新增至群組之前,不需要向防火牆註冊帳戶本身。
如果呼叫成功,則會對記憶體中快取和持久性儲存進行群組成員資格的變更。
引數
群組
:受影響群組設定檔的名稱。使用者
:要新增的帳戶,格式為
字串。使用者名稱
@主機名稱
範例
CALL mysql.sp_firewall_group_enlist('g', 'fwuser@localhost');
sp_reload_firewall_group_rules(
群組
)此預存程序提供對個別群組設定檔的防火牆運作控制。此程序會使用防火牆管理功能,從
表格中儲存的規則重新載入群組設定檔的記憶體中規則。防火牆資料庫
.firewall_group_allowlist引數
群組
:受影響群組設定檔的名稱。
範例
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(
群組
,模式
)此預存程序會為防火牆群組設定檔建立運作模式,如果設定檔尚未註冊,則會在向防火牆註冊設定檔之後進行。此程序也會在必要時呼叫防火牆管理功能,以在快取和持久性儲存之間傳輸防火牆資料。即使
mysql_firewall_mode
系統變數為OFF
,也可以呼叫此程序,儘管在啟用防火牆之前,設定設定檔的模式不會產生任何運作效果。如果設定檔先前存在,則該設定檔的任何記錄限制都會保持不變。若要設定或清除限制,請改為呼叫
sp_set_firewall_group_mode_and_user()
。引數
群組
:受影響群組設定檔的名稱。模式
:設定檔的運作模式,以字串表示。允許的模式值為OFF
、DETECTING
、PROTECTING
和RECORDING
。關於這些模式意義的詳細資訊,請參閱 防火牆概念。
範例
CALL mysql.sp_set_firewall_group_mode('myapp', 'PROTECTING');
sp_set_firewall_group_mode_and_user(
群組
,模式
,使用者
)此預存程序會向防火牆註冊群組並建立其運作模式,類似於
sp_set_firewall_group_mode()
,但也會指定當群組處於RECORDING
模式時要使用的訓練帳戶。引數
群組
:受影響群組設定檔的名稱。模式
:設定檔的運作模式,以字串表示。允許的模式值為OFF
、DETECTING
、PROTECTING
和RECORDING
。關於這些模式意義的詳細資訊,請參閱 防火牆概念。使用者
:群組設定檔的訓練帳戶,當設定檔處於RECORDING
模式時使用。此值為NULL
,或格式為
的非使用者名稱
@主機名稱
NULL
帳戶。如果值為
NULL
,則防火牆會記錄來自任何屬於該群組的帳戶的陳述式允許清單規則。如果值為非
NULL
,則防火牆只會記錄來自指定帳戶(應為群組成員)的陳述式允許清單規則。
範例
CALL mysql.sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost');
防火牆帳戶設定檔預存程序
這些預存程序會對防火牆帳戶設定檔執行管理作業
sp_reload_firewall_rules(
使用者
)此預存程序提供對個別帳戶設定檔的防火牆運作控制。此程序會使用防火牆管理功能,從
表格中儲存的規則重新載入帳戶設定檔的記憶體中規則。防火牆資料庫
.firewall_whitelist引數
使用者
:受影響帳戶設定檔的名稱,格式為
字串。使用者名稱
@主機名稱
範例
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
,也可以呼叫此程序,但設定設定檔的模式在啟用防火牆之前沒有任何操作效果。引數
使用者
:受影響帳戶設定檔的名稱,格式為
字串。使用者名稱
@主機名稱
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 Firewall 管理功能會提供 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
)此彙總函式會透過
SELECT
在
表格上進行的陳述式,更新指定群組設定檔的記錄陳述式快取。它需要firewall-database
.firewall_group_allowlistFIREWALL_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
)此彙總函式會透過
SELECT
在
表格上進行的陳述式,更新防火牆群組設定檔快取。它需要firewall-database
.firewall_groupsFIREWALL_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
)此彙總函式會透過
SELECT
在
表格上進行的陳述式,更新防火牆帳戶設定檔快取。它需要firewall-database
.firewall_usersFIREWALL_ADMIN
權限或已棄用的SUPER
權限。範例
SELECT read_firewall_users('fwuser@localhost', 'RECORDING') FROM mysql.firewall_users;
此功能已被棄用,並可能在未來的 MySQL 版本中移除。請參閱將帳戶設定檔遷移至群組設定檔。
read_firewall_whitelist(
user
,rule
)此彙總函式會透過
SELECT
在
表格上進行的陳述式,更新指定帳戶設定檔的記錄陳述式快取。它需要firewall-database
.firewall_whitelistFIREWALL_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 Firewall 支援下列系統變數。使用它們來設定防火牆操作。除非安裝了防火牆,否則這些變數無法使用 (請參閱第 8.4.7.2 節:「安裝或解除安裝 MySQL Enterprise Firewall」)。
-
命令列格式 --mysql-firewall-database[=值]
系統變數 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 管理函數)會將它們中的許多值重設為零。