您可以在PolarDB控制台新增、啟用或禁用黑名單規則,同時您還可以修改或刪除已有的規則。本文將介紹黑名單規則的概念以及相關的操作步驟。
黑名單規則
Proxy提供的一種攔截能力,您可以通過配置黑名單規則來攔截指定類型的SQL語句或具體的SQL語句。
當前支援通過以下三種方式配置黑名單規則:
關聯規則模式:在控制台設定的常見的黑名單規則模式,每一種規則可以設定對某個帳號以及某個叢集生效。當前支援的常見規則請參見配置SQL防火牆規則。
使用者自訂SQL參數化模式:該模式支援將您在資料庫中執行的SQL語句中的所有變數進行參數化處理,並產生參數化模板記錄到資料庫中。當執行符合參數化模板的SQL語句時,Proxy會進行攔截。
使用者自訂具體SQL模式:該模式支援對您指定的具體的SQL語句進行攔截,而不將SQL語句中的變數進行參數化處理,其它任意參數的SQL語句不受該模式影響。
新增黑名單規則
登入PolarDB控制台。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
在左側功能表列中單擊 。
在SQL防火牆頁簽,單擊頁面左側的新增。
在建立SQL防火牆規則對話方塊中,根據您需要建立的黑名單模式,設定對應的參數資訊。
關聯規則模式。
選擇建立關聯規則模式時,設定以下參數。
表 1. 配置SQL防火牆規則 參數名稱
是否必填
描述
基本信息
规则名称
是
SQL防火牆規則的名稱。規則名稱需滿足如下要求:
使用數字和英文字母組成。
字元長度不能超過30個字元。
规则描述
否
描述該規則的相關資訊,便於後續管理。
說明字元長度不能超過64個字元。
Endpoint
是
需要應用當前規則的Endpoint。
规则配置
規則類型
是
需要新增的規則類型。選擇黑名單規則。
當前模式
否
SQL防火牆規則的模式。固定為防護模式。即檢測到符合黑名單中的SQL語句時,進行攔截。
資料庫帳號名
否
需要應用當前規則的資料庫帳號名稱。支援以下選項:
所有数据库账号:表示當前規則對該叢集中的所有資料庫帳號生效,此時右側文字框無需填寫任何內容。
包含:表示當前規則僅對目標資料庫帳號生效,此時右側文字框中必須填入一個或多個資料庫帳號名,多個帳號之間使用英文逗號(,)分隔。
不包含:表示當前規則會對該叢集中,除目標資料庫帳號外的所有資料庫帳號生效,此時右側文字框中必須填入一個或多個資料庫帳號名,多個帳號之間使用英文逗號(,)分隔。
說明文字框中填入的資料庫帳號名稱需滿足如下格式中的任意一種:
帳號名
。樣本:user
。帳號名@完整IP地址
。樣本:user@10.0.0.0
。
攔截*號
否
是否攔截含有
*
號的SQL語句。取值:開啟:攔截含有
*
號的SQL語句。關閉:不攔截含有
*
號的SQL語句。
攔截特定類型
否
是否攔截特定類型的SQL語句。取值:
開啟:攔截特定類型的SQL語句。如果選擇開啟攔截特定類型,則至少選擇其中一種類型。目前支援的類型有:
CREATE
DROP
ALTER
TRUNCATE
RENAME
INSERT
UPDATE
SELECT
DELETE
關閉:不攔截特定類型的SQL語句。
攔截無where條件
否
是否攔截無where條件的SQL語句。取值:
開啟:攔截指定類型且無where條件的SQL語句。如果選擇開啟攔截無where條件,則至少選擇其中一種類型。目前支援的類型有:
UPDATE
SELECT
DELETE
關閉:不攔截無where條件的SQL語句。
說明目前只針對
SELECT
、UPDATE
和DELETE
語句且語句中至少包含一個表名時生效。SELECT 1;
這類語句不會被Proxy攔截。攔截特定列名
否
是否攔截含有特定列名的SQL語句。取值:
開啟:攔截含有特定列名的SQL語句。如果選擇開啟攔截特定列名,支援以下選項:
所有:表示當前規則對該叢集中的所有資料庫列名生效,此時右側文字框無需填寫任何內容。
包含:表示當前規則僅對該叢集中指定的列名生效,此時右側文字框中必須填入一個或多個列名,多個列名之間使用英文逗號(,)分隔。
不包含:表示當前規則會對該叢集中,除指定的列名外的所有資料庫列名生效,此時右側文字框中必須填入一個或多個列名,多個列名之間使用英文逗號(,)分隔。
關閉:不攔截含有特定列名的SQL語句。
攔截特定函數
否
是否攔截特定函數。取值:
開啟:攔截含有特定函數的SQL語句。如果選擇開啟攔截特定函數,支援以下選項:
所有:表示當前規則對在該叢集的資料庫中執行的所有函數生效,此時右側文字框無需填寫任何內容。
包含:表示當前規則僅對在該叢集的資料庫中執行的特定的函數生效,此時右側文字框中必須填入一個或多個函數名,多個函數名之間使用英文逗號(,)分隔。
不包含:表示當前規則會對在該叢集的資料庫中執行的,除指定的函數名外的所有函數生效,此時右側文字框中必須填入一個或多個函數名,多個函數名之間使用英文逗號(,)分隔。
關閉:不攔截含有特定函數的SQL語句。
攔截特定函數引用特定列名
否
是否攔截含有特定函數且引用特定列名的SQL語句。取值:
開啟:攔截含有特定函數且引用特定列名的SQL語句。如果選擇開啟攔截特定函數引用特定列名,右側文字框中必須填入一個或多個函數名和列名。其中:
如果函數名選擇包含,列名也選擇包含時。表示該規則對該叢集中使用特定函數,且引用特定列名的SQL語句生效。
如果函數名選擇包含,列名選擇不包含。表示該規則對該叢集中使用特定函數,且引用指定列名之外的SQL語句生效。
如果函數名選擇不包含,列名選擇包含。表示該規則對該叢集中使用特定函數之外的函數,且引用指定列名的SQL語句生效。
如果函數名選擇不包含,列名也選擇不包含。表示該規則對該叢集中使用特定函數之外的函數,且引用指定列名之外的列名的SQL語句生效。
關閉:不攔截含有特定函數且引用特定列名的SQL語句。
規則設定完成後,單擊確定。
使用者自訂SQL參數化模式。
選擇建立使用者自訂SQL參數化模式時,設定您需要的參數資訊,具體的參數資訊請參見配置SQL防火牆規則。
說明當您使用使用者自訂SQL參數化模式時,可以不開啟規則配置中的任何攔截規則。
規則設定完成後,單擊確定。
使用上述步驟中的資料庫帳號名串連指定的資料庫Endpoint地址。通過在指定的SQL語句前添加
HINT
命令hint(/* store_to_blacklist */)
來指定要攔截的SQL語句。例如,攔截SQL語句select id from sqlblack_test where id = 1;
,執行如下命令:/* store_to_blacklist */ select id from sqlblack_test where id = 1;
參數化後的模板如下:
select id from sqlblack_test where id = ?
其中,
?
表示任意值。等待5s,當使用該帳號在該指定的叢集中執行符合以上參數化模板的SQL語句時,會被Proxy進行攔截。攔截後顯示的資訊如下:
ERROR 1141 (HY000): This SQL is rejected by SQL Firewall. Access denied for user 'xxx'@'x.x.x.x' to database 'xzh': This SQL is in blacklist bl_test.
其中,
bl_test
為黑名單規則表。
說明如果使用MySQL命令列,需要加
-c
選項,否則HINT
命令不生效。被參數化後的SQL語句,需要等待5s才會生效。
使用者自訂具體SQL模式。
選擇建立使用者自訂具體SQL模式時,設定您需要的參數資訊,具體的參數資訊請參見配置SQL防火牆規則。
說明當您使用使用者自訂具體SQL模式時,可以不開啟規則配置中的任何攔截規則。
規則設定完成後,單擊確定。
使用上述步驟中的資料庫帳號名串連指定的資料庫Endpoint地址。通過在指定的SQL語句前添加
HINT
命令hint(/* orginal_store_to_blacklist */)
來指定要攔截的SQL語句。例如,攔截SQL語句update t set k = 2 where id = 2;
。/* orginal_store_to_blacklist */ update t set k = 2 where id = 2;
等待5s,當使用該帳號在該指定的叢集中執行該具體的SQL語句
update t set k = 2 where id = 2;
時,會被Proxy進行攔截,而其他參數的SQL語句不受影響。攔截後顯示的資訊如下:ERROR 1141 (HY000): This SQL is rejected by SQL Firewall. Access denied for user 'xxx'@'x.x.x.x' to database 'xzh': This SQL is in blacklist bl_test.
其中,
bl_test
為黑名單規則表。
說明如果使用MySQL命令列,需要加
-c
選項,否則HINT
命令不生效。被參數化後的SQL語句,需要等待5s才會生效。
啟用或禁用黑名單規則
登入PolarDB控制台。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
在左側功能表列中單擊 。
在SQL防火牆頁簽,找到需要啟用或禁用的規則,開啟啟/禁規則開關。
說明您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的啟用或禁用按鈕,批量啟用或禁用規則。
在彈出的啟用或禁用對話方塊中,單擊確定。
修改SQL黑名單規則
登入PolarDB控制台。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
在左側功能表列中單擊 。
在SQL防火牆頁簽,找到需要修改的規則,單擊操作列的修改,在彈出的修改SQL防火牆規則對話方塊中,根據業務需要修改規則參數。規則參數的具體說明,請參見配置SQL防火牆規則。
說明修改規則時,不支援修改規則名稱。
規則修改完成後,單擊確認。
使用者自訂SQL參數化模式規則中的參數化SQL語句,以及使用者自訂具體SQL模式規則中的具體SQL語句不支援在控制台修改,只能在資料庫表中進行刪除後重新添加。
刪除黑名單規則
登入PolarDB控制台。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
在左側功能表列中單擊 。
在SQL防火牆頁簽,找到需要刪除的規則,單擊操作列的刪除。
說明您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的刪除,大量刪除規則。
在彈出的刪除對話方塊中,單擊確定。
取消指定模式黑名單規則
使用者自訂SQL參數化模式黑名單規則。
您可以通過以下兩種方式取消使用者自訂SQL參數化模式黑名單規則。
通過啟用或禁用黑名單規則或刪除黑名單規則取消使用者自訂SQL參數化模式黑名單規則。
說明如果僅在控制台禁用該模式的黑名單規則,而沒有在資料庫中
proxy_auditing.sql_list
表裡刪除對應的參數化SQL語句,則在控制台再次啟用對應帳號的該黑名單規則時,該規則仍然會生效。通過您的超級帳號串連到Endpoint主節點,刪除
proxy_auditing.sql_list
表中相應的SQL語句。等待5s,該參數化SQL語句將不再被攔截。說明在進行刪除操作時,請勿直接使用
DROP
命令刪除表。
使用者自訂具體SQL模式黑名單規則。
您可以通過以下兩種方式取消使用者自訂具體SQL模式黑名單規則。
通過啟用或禁用黑名單規則或刪除黑名單規則取消使用者自訂具體SQL模式黑名單規則。
說明如果僅在控制台禁用該模式的黑名單規則,而沒有在資料庫中
proxy_auditing.org_sql_list
表裡刪除對應的SQL語句,則在控制台再次啟用對應帳號的該黑名單規則時,該規則仍然會生效。通過您的超級帳號串連到Endpoint主節點,刪除
proxy_auditing.org_sql_list
表中相應的SQL語句。等待5s,該SQL語句將不再被攔截。說明在進行刪除操作時,請勿直接使用
DROP
命令刪除表。