您可以在PolarDB控制台新增、啟用或禁用白名單規則,同時您還可以修改或刪除已有的規則。本文將介紹白名單規則的概念以及相關的操作步驟。
白名單規則
設定白名單規則後,任何不包含在白名單中的SQL語句都會被攔截或警示。此模式用於保護您的主業務使用的帳號。即只允許此帳號執行業務中使用的SQL語句,不允許執行任何業務外的SQL語句。由於實際業務中使用的SQL語句可能會很多,單個SQL語句錄入會相當耗時,為了提升工作效率和使用體驗。Proxy提供了以下三種白名單模式:
訓練模式:Proxy只收集SQL語句,而不進行SQL語句攔截和警示。
檢驗模式:檢測到不包含在白名單中的SQL語句時,只記錄不進行SQL攔截。
防護模式:檢測到不包含在白名單中的SQL語句時,進行SQL攔截並記錄。
您也可以在控制台設定多個白名單,每個白名單可以通過不同的帳號去訓練。開啟檢驗模式和防護模式後,也可以單獨為每個白名單指定執行帳號。
新增白名單規則
登入PolarDB控制台。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集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。
在左側功能表列中單擊 。
在SQL防火牆頁簽,找到需要啟用或禁用的規則,開啟啟/禁規則開關。
說明您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的啟用或禁用按鈕,批量啟用或禁用規則。
在彈出的啟用或禁用對話方塊中,單擊確定。
修改白名單規則
登入PolarDB控制台。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
在左側功能表列中單擊 。
在SQL防火牆頁簽,找到需要修改的規則,單擊操作列的修改,在彈出的修改SQL防火牆規則對話方塊中,根據業務需要修改規則參數。規則參數的具體說明,請參見新增白名單規則。
說明修改規則時,不支援修改規則名稱。
規則修改完成後,單擊確定。
資料庫中被參數化後的SQL語句不支援在控制台修改,只能刪除資料庫表proxy_auditing.sql_list
中的參數化SQL語句後重新添加。
刪除白名單規則
登入PolarDB控制台。
在左上方,選擇叢集所在地區。
找到目的地組群,單擊叢集ID。
在左側功能表列中單擊 。
在SQL防火牆頁簽,找到需要刪除的規則,單擊操作列的刪除。
說明您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的刪除來大量刪除規則。
在彈出的刪除對話方塊中,單擊確定。