全部產品
Search
文件中心

PolarDB:設定黑名單規則

更新時間:Dec 27, 2024

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

黑名單規則

Proxy提供的一種攔截能力,您可以通過配置黑名單規則來攔截指定類型的SQL語句或具體的SQL語句。

當前支援通過以下三種方式配置黑名單規則:

  • 關聯規則模式:在控制台設定的常見的黑名單規則模式,每一種規則可以設定對某個帳號以及某個叢集生效。當前支援的常見規則請參見配置SQL防火牆規則

  • 使用者自訂SQL參數化模式:該模式支援將您在資料庫中執行的SQL語句中的所有變數進行參數化處理,並產生參數化模板記錄到資料庫中。當執行符合參數化模板的SQL語句時,Proxy會進行攔截。

  • 使用者自訂具體SQL模式:該模式支援對您指定的具體的SQL語句進行攔截,而不將SQL語句中的變數進行參數化處理,其它任意參數的SQL語句不受該模式影響。

新增黑名單規則

  1. 登入PolarDB控制台

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

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

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

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

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

    • 關聯規則模式

      1. 選擇建立關聯規則模式時,設定以下參數。

        表 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語句。

        說明

        目前只針對SELECTUPDATEDELETE語句且語句中至少包含一個表名時生效。SELECT 1;這類語句不會被Proxy攔截。

        攔截特定列名

        是否攔截含有特定列名的SQL語句。取值:

        • 開啟:攔截含有特定列名的SQL語句。如果選擇開啟攔截特定列名,支援以下選項:

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

          • 包含:表示當前規則僅對該叢集中指定的列名生效,此時右側文字框中必須填入一個或多個列名,多個列名之間使用英文逗號(,)分隔。

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

        • 關閉:不攔截含有特定列名的SQL語句。

        攔截特定函數

        是否攔截特定函數。取值:

        • 開啟:攔截含有特定函數的SQL語句。如果選擇開啟攔截特定函數,支援以下選項:

          • 所有:表示當前規則對在該叢集的資料庫中執行的所有函數生效,此時右側文字框無需填寫任何內容。

          • 包含:表示當前規則僅對在該叢集的資料庫中執行的特定的函數生效,此時右側文字框中必須填入一個或多個函數名,多個函數名之間使用英文逗號(,)分隔。

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

        • 關閉:不攔截含有特定函數的SQL語句。

        攔截特定函數引用特定列名

        是否攔截含有特定函數且引用特定列名的SQL語句。取值:

        • 開啟:攔截含有特定函數且引用特定列名的SQL語句。如果選擇開啟攔截特定函數引用特定列名,右側文字框中必須填入一個或多個函數名列名。其中:

          • 如果函數名選擇包含列名也選擇包含時。表示該規則對該叢集中使用特定函數,且引用特定列名的SQL語句生效。

          • 如果函數名選擇包含列名選擇不包含。表示該規則對該叢集中使用特定函數,且引用指定列名之外的SQL語句生效。

          • 如果函數名選擇不包含列名選擇包含。表示該規則對該叢集中使用特定函數之外的函數,且引用指定列名的SQL語句生效。

          • 如果函數名選擇不包含列名也選擇不包含。表示該規則對該叢集中使用特定函數之外的函數,且引用指定列名之外的列名的SQL語句生效。

        • 關閉:不攔截含有特定函數且引用特定列名的SQL語句。

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

    • 使用者自訂SQL參數化模式

      1. 選擇建立使用者自訂SQL參數化模式時,設定您需要的參數資訊,具體的參數資訊請參見配置SQL防火牆規則

        說明

        當您使用使用者自訂SQL參數化模式時,可以不開啟規則配置中的任何攔截規則。

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

      3. 使用上述步驟中的資料庫帳號名串連指定的資料庫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模式

      1. 選擇建立使用者自訂具體SQL模式時,設定您需要的參數資訊,具體的參數資訊請參見配置SQL防火牆規則

        說明

        當您使用使用者自訂具體SQL模式時,可以不開啟規則配置中的任何攔截規則。

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

      3. 使用上述步驟中的資料庫帳號名串連指定的資料庫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才會生效。

啟用或禁用黑名單規則

  1. 登入PolarDB控制台

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

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

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

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

    說明

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

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

修改SQL黑名單規則

  1. 登入PolarDB控制台

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

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

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

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

    說明

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

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

說明

使用者自訂SQL參數化模式規則中的參數化SQL語句,以及使用者自訂具體SQL模式規則中的具體SQL語句不支援在控制台修改,只能在資料庫表中進行刪除後重新添加。

刪除黑名單規則

  1. 登入PolarDB控制台

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

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

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

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

    說明

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

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

取消指定模式黑名單規則

  • 使用者自訂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命令刪除表。