全部產品
Search
文件中心

PolarDB:設定白名單規則

更新時間:Dec 27, 2024

您可以在PolarDB控制台新增、啟用或禁用白名單規則,同時您還可以修改或刪除已有的規則。本文將介紹白名單規則的概念以及相關的操作步驟。

白名單規則

設定白名單規則後,任何不包含在白名單中的SQL語句都會被攔截或警示。此模式用於保護您的主業務使用的帳號。即只允許此帳號執行業務中使用的SQL語句,不允許執行任何業務外的SQL語句。由於實際業務中使用的SQL語句可能會很多,單個SQL語句錄入會相當耗時,為了提升工作效率和使用體驗。Proxy提供了以下三種白名單模式:

  • 訓練模式:Proxy只收集SQL語句,而不進行SQL語句攔截和警示。

  • 檢驗模式:檢測到不包含在白名單中的SQL語句時,只記錄不進行SQL攔截。

  • 防護模式:檢測到不包含在白名單中的SQL語句時,進行SQL攔截並記錄。

您也可以在控制台設定多個白名單,每個白名單可以通過不同的帳號去訓練。開啟檢驗模式防護模式後,也可以單獨為每個白名單指定執行帳號。

新增白名單規則

  1. 登入PolarDB控制台

  2. 在左上方,選擇叢集所在地區。

  3. 找到目的地組群,單擊叢集ID。

  4. 在左側功能表列中單擊配置與管理 > 安全管理

  5. SQL防火牆頁簽,單擊頁面左側的新增

  6. 建立SQL防火牆規則對話方塊中,根據您需要建立的白名單模式,設定對應的參數資訊。

    表 1. 配置SQL防火牆規則

    參數名稱

    是否必填

    描述

    基本信息

    规则名称

    SQL防火牆規則的名稱。規則名稱需滿足以下條件:

    • 使用數字和英文字母組成。

    • 字元長度不能超過30個字元。

    规则描述

    描述該規則的相關資訊,便於後續管理。

    說明

    字元長度不能超過64個字元。

    Endpoint

    需要應用當前規則的Endpoint。

    规则配置

    規則類型

    需要新增的規則類型。選擇白名單規則

    當前模式

    SQL防火牆規則的模式。取值:

    • 訓練模式:只收集SQL語句,不進行記錄和攔截。

    • 檢驗模式:檢測到白名單外的SQL語句時,只記錄不進行攔截。

    • 防護模式:檢測到白名單外的SQL語句時,進行記錄並攔截。

    資料庫帳號名

    需要應用當前規則的資料庫帳號名稱。支援以下選項:

    • 所有数据库账号:表示當前規則對該叢集中的所有資料庫帳號生效,此時右側文字框無需填寫任何內容。

    • 包含:表示當前規則僅對目標資料庫帳號生效,此時右側文字框中必須填入一個或多個資料庫帳號名,多個帳號之間使用英文逗號(,)分隔。

    • 不包含:表示當前規則會對該叢集中,除目標資料庫帳號外的所有資料庫帳號生效,此時右側文字框中必須填入一個或多個資料庫帳號名,多個帳號之間使用英文逗號(,)分隔。

    說明

    文字框中填入的資料庫帳號名稱需滿足如下格式中的任意一種:

    • 帳號名。樣本:user

    • 帳號名@完整IP地址。樣本:user@10.0.0.0

  7. 規則設定完成後,單擊確定

  8. 根據您選擇的模式,選擇執行的操作步驟。

    • 如果當前模式訓練模式,請執行以下步驟。

      1. 使用上述步驟中的資料庫帳號名串連指定的資料庫Endpoint地址。

      2. 使用該帳號執行業務中需要添加到白名單中的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語句進行參數化處理並添加到白名單中。

    • 如果當前模式檢驗模式,請執行以下步驟。

      1. 使用上述步驟中的資料庫帳號名串連指定的資料庫Endpoint地址。

      2. 使用該帳號執行業務中使用的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
    • 如果當前模式防護模式,請執行以下步驟。

      1. 使用上述步驟中的資料庫帳號名串連指定的資料庫Endpoint地址。

      2. 使用該帳號執行業務中使用的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語句將不能夠被執行。

  • 您可以在控制台新增多個白名單,每個白名單可以通過不同的帳號去訓練。啟用檢驗模式防護模式後,也可以單獨為每個白名單指定要對哪些帳號起作用。

啟用或禁用白名單規則

  1. 登入PolarDB控制台

  2. 在左上方,選擇叢集所在地區。

  3. 找到目的地組群,單擊叢集ID。

  4. 在左側功能表列中單擊配置與管理 > 安全管理

  5. SQL防火牆頁簽,找到需要啟用或禁用的規則,開啟啟/禁規則開關。

    說明

    您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的啟用禁用按鈕,批量啟用或禁用規則。

  6. 在彈出的啟用禁用對話方塊中,單擊確定

修改白名單規則

  1. 登入PolarDB控制台

  2. 在左上方,選擇叢集所在地區。

  3. 找到目的地組群,單擊叢集ID。

  4. 在左側功能表列中單擊配置與管理 > 安全管理

  5. SQL防火牆頁簽,找到需要修改的規則,單擊操作列的修改,在彈出的修改SQL防火牆規則對話方塊中,根據業務需要修改規則參數。規則參數的具體說明,請參見新增白名單規則

    說明

    修改規則時,不支援修改規則名稱

  6. 規則修改完成後,單擊確定

說明

資料庫中被參數化後的SQL語句不支援在控制台修改,只能刪除資料庫表proxy_auditing.sql_list中的參數化SQL語句後重新添加。

刪除白名單規則

  1. 登入PolarDB控制台

  2. 在左上方,選擇叢集所在地區。

  3. 找到目的地組群,單擊叢集ID。

  4. 在左側功能表列中單擊配置與管理 > 安全管理

  5. SQL防火牆頁簽,找到需要刪除的規則,單擊操作列的刪除

    說明

    您也可以在規則列表中同時選中多個目標規則,然後單擊列表下方的刪除來大量刪除規則。

  6. 在彈出的刪除對話方塊中,單擊確定