您可以在PolarDB控制台新增、啟用或禁用白名單規則,同時您還可以修改或刪除已有的規則。本文將介紹白名單規則的概念以及相關的操作步驟。
白名單規則
設定白名單規則後,任何不包含在白名單中的SQL語句都會被攔截或警示。此模式用於保護您的主業務使用的帳號。即只允許此帳號執行業務中使用的SQL語句,不允許執行任何業務外的SQL語句。由於實際業務中使用的SQL語句可能會很多,單個SQL語句錄入會相當耗時,為了提升工作效率和使用體驗。Proxy提供了以下三種白名單模式:
-
训练模式:Proxy只收集SQL語句,而不進行SQL語句攔截和警示。
-
检验模式:檢測到不包含在白名單中的SQL語句時,只記錄不進行SQL攔截。
-
防护模式:檢測到不包含在白名單中的SQL語句時,進行SQL攔截並記錄。
您也可以在控制台設定多個白名單,每個白名單可以通過不同的帳號去訓練。開啟检验模式和防护模式後,也可以單獨為每個白名單指定執行帳號。
新增白名單規則
- 登入PolarDB控制台。 在控制台左上方,選擇叢集所在地區。 找到目的地組群,單擊叢集ID。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
-
在左側功能表列中單擊。
-
在SQL防火墙頁簽,單擊頁面左側的新增。
-
在新建SQL防火墙规则對話方塊中,根據您需要建立的白名單模式,設定對應的參數資訊。
表 1. 配置SQL防火牆規則
參數名稱
是否必填
描述
基本信息
规则名称
是
SQL防火牆規則的名稱。規則名稱需滿足以下條件:
-
使用數字和英文字母組成。
-
字元長度不能超過30個字元。
规则描述
否
描述該規則的相關資訊,便於後續管理。
說明字元長度不能超過64個字元。
Endpoint
是
需要應用當前規則的Endpoint。
规则配置
规则类型
是
需要新增的規則類型。選擇白名单规则。
当前模式
否
SQL防火牆規則的模式。取值:
-
训练模式:只收集SQL語句,不進行記錄和攔截。
-
检验模式:檢測到白名單外的SQL語句時,只記錄不進行攔截。
-
防护模式:檢測到白名單外的SQL語句時,進行記錄並攔截。
数据库账号名
否
需要應用當前規則的資料庫帳號名稱。支援以下選項:
-
所有数据库账号:表示當前規則對該叢集中的所有資料庫帳號生效,此時右側文字框無需填寫任何內容。
-
包含:表示當前規則僅對目標資料庫帳號生效,此時右側文字框中必須填入一個或多個資料庫帳號名,多個帳號之間使用英文逗號(,)分隔。
-
不包含:表示當前規則會對該叢集中,除目標資料庫帳號外的所有資料庫帳號生效,此時右側文字框中必須填入一個或多個資料庫帳號名,多個帳號之間使用英文逗號(,)分隔。
說明文字框中填入的資料庫帳號名稱需滿足如下格式中的任意一種:
-
帳號名。樣本:user。 -
帳號名@完整IP地址。樣本:user@10.0.0.0。
-
-
規則設定完成後,單擊确定。
-
根據您選擇的模式,選擇執行的操作步驟。
-
如果当前模式為训练模式,請執行以下步驟。
-
使用上述步驟中的数据库账号名串連指定的資料庫Endpoint地址。
-
使用該帳號執行業務中需要添加到白名單中的SQL語句,Proxy會將SQL語句進行參數化處理,並儲存到資料庫中的白名單中。例如,
update t set k = 2 where id = 2;參數化後的SQL語句如下:
update t set k = ? where id = ?其中,
?表示任意值。該參數化後的SQL語句update t set k = ? where id = ?會被收集到白名單中。
說明您也可以在任意白名單模式下,在業務SQL語句前添加
HINT命令hint(/* store_to_whitelist */),將業務SQL語句進行參數化處理並添加到白名單中。 -
-
如果当前模式為检验模式,請執行以下步驟。
-
使用上述步驟中的数据库账号名串連指定的資料庫Endpoint地址。
-
使用該帳號執行業務中使用的SQL語句,檢測是否還存在沒有被收集到白名單中的SQL語句。例如:
update t set k = 2 where k = 2如果該SQL語句不包含在白名單中,Proxy會將該SQL語句允許存取並記錄。且執行結果如下:
Query OK, 0 rows affected(0.03 sec) Rows matched:1 Changed: 0 Warnings:0
-
-
如果当前模式為防护模式,請執行以下步驟。
-
使用上述步驟中的数据库账号名串連指定的資料庫Endpoint地址。
-
使用該帳號執行業務中使用的SQL語句。例如,
select id from t where id = 1;如果該SQL語句沒有包含在白名單中,Proxy會進行記錄和攔截,且執行結果如下:
ERROR 1141 (HY000): This SQL is rejected by SQL Firewall. Access denied for user 'xzh'@'x.x.x.x' to database 'xzh': This SQL is not in whitelist wl_test.
-
-
-
每次更新業務時,都需要進行一次SQL語句訓練,否則,新業務的SQL語句將不能夠被執行。
-
您可以在控制台新增多個白名單,每個白名單可以通過不同的帳號去訓練。啟用检验模式和防护模式後,也可以單獨為每個白名單指定要對哪些帳號起作用。
啟用或禁用白名單規則
- 登入PolarDB控制台。 在控制台左上方,選擇叢集所在地區。 找到目的地組群,單擊叢集ID。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
-
在左側功能表列中單擊。
-
在SQL防火墙頁簽,找到需要啟用或禁用的規則,開啟启/禁规则開關。
說明您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的启用或禁用按鈕,批量啟用或禁用規則。
-
在彈出的启用或禁用對話方塊中,單擊确定。
修改白名單規則
- 登入PolarDB控制台。 在控制台左上方,選擇叢集所在地區。 找到目的地組群,單擊叢集ID。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
-
在左側功能表列中單擊。
-
在SQL防火墙頁簽,找到需要修改的規則,單擊操作列的修改,在彈出的修改SQL防火墙规则對話方塊中,根據業務需要修改規則參數。規則參數的具體說明,請參見新增白名單規則。
說明修改規則時,不支援修改规则名称。
-
規則修改完成後,單擊确定。
資料庫中被參數化後的SQL語句不支援在控制台修改,只能刪除資料庫表proxy_auditing.sql_list中的參數化SQL語句後重新添加。
刪除白名單規則
- 登入PolarDB控制台。 在控制台左上方,選擇叢集所在地區。 找到目的地組群,單擊叢集ID。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
-
在左側功能表列中單擊。
-
在SQL防火墙頁簽,找到需要刪除的規則,單擊操作列的刪除。
說明您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的刪除來大量刪除規則。
-
在彈出的刪除對話方塊中,單擊确定。