日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

查詢攔截

本文介紹云數據庫 SelectDB 版提供的SQL查詢攔截相關功能,幫助您進行SQL管理。

概述

在生產環境的部分場景下,需要對可執行的SQL語句做出限制,例如屏蔽刪除或某些已知的高風險查詢語句。為滿足此類場景需求,SelectDB提供了SQL查詢攔截功能。當您在SelectDB上執行的SQL命中了攔截規則,SelectDB將不允許該SQL執行,并返回錯誤信息。

創建攔截規則

創建SQL攔截規則可用于限制任何SQL語句(包括DDL和DML語句)。支持按數據庫賬號配置SQL黑名單。

SQL攔截規則可通過以下方式進行配置:

  • 通過正則匹配的方式拒絕指定的SQL。

  • 通過設置partition_num、tablet_num、cardinality,檢查一個查詢是否達到其中一個限制。這幾個查詢配置項可以同時設置,一旦查詢觸發其中任何一個限制,就會觸發攔截。

語法

CREATE SQL_BLOCK_RULE rule_name 
[PROPERTIES ("key"="value", ...)];

參數說明

參數名稱

必填

參數說明

rule_name

規則名稱。

PROPERTIES

具體屬性,詳細說明請參見下文。

常用的PROPERTIES參數如下。

參數名稱

必填

參數說明

sql

匹配規則(基于正則匹配,特殊字符需要轉譯。如select *使用select \\*),默認值為NULL,最后無需帶分號。

sqlHash

SQL Hash值,用于完全匹配。默認值為NULL。fe.audit.log將會記錄這個值,這個參數和sql只能二選一。

partition_num

一個掃描節點會掃描的最大Partition數量。默認值為0L,不限制。

tablet_num

一個掃描節點會掃描的最大Tablet數量。默認值為0L,不限制。

cardinality

一個掃描節點粗略的掃描行數。默認值為0L,不限制

global

是否全局(對所有用戶)生效。默認值為false

enable

是否開啟阻止規則。默認值為true

使用示例

  • 創建一個名稱為test_rule的阻止規則,示例如下。

    CREATE SQL_BLOCK_RULE test_rule 
    PROPERTIES(
      "sql"="select \\* from order_analysis",
      "global"="false",
      "enable"="true",
      "sqlHash"=""
    )

    當執行SQL名字上述攔截規則時,會返回如下錯誤提醒。

    SELECT * FROM order_analysis;
    ERROR 1064 (HY000): errCode = 2, detailMessage = sql match regex sql block rule: order_analysis_rule
  • 創建test_rule2,將最大掃描的分區數量限制在30個,最大掃描基數限制在100億行,示例如下。

    CREATE SQL_BLOCK_RULE test_rule2 
    PROPERTIES
    (
       "partition_num" = "30",
       "cardinality" = "10000000000",
       "global" = "false",
       "enable" = "true"
    );
    Query OK, 0 rows affected (0.01 sec)
  • 創建包含特殊字符的SQL BLOCK RULE,示例如下。正則表達式中()符號是特殊符號,所以需要轉義。

    CREATE SQL_BLOCK_RULE test_rule3
    PROPERTIES
    ( 
        "sql" = "select count\\(1\\) from test_db.test_table"
    );
    
    CREATE SQL_BLOCK_RULE test_rule4
    PROPERTIES
    ( 
        "sql" = "select \\* from db1.tbl1"
    );

查看攔截規則

查看已配置的SQL阻止規則,不指定規則名則為查看所有規則。

語法

SHOW SQL_BLOCK_RULE [FOR RULE_NAME];

參數說明

參數名稱

必填

參數說明

rule_name

規則名稱。

使用示例

  • 查看所有規則,示例如下。

    SHOW SQL_BLOCK_RULE;
    +------------+------------------------+---------+--------------+-----------+-------------+--------+--------+
    | Name       | Sql                    | SqlHash | PartitionNum | TabletNum | Cardinality | Global | Enable |
    +------------+------------------------+---------+--------------+-----------+-------------+--------+--------+
    | test_rule  | select * from order_analysis | NULL    | 0            | 0         | 0           | true   | true   |
    | test_rule2 | NULL                   | NULL    | 30           | 0         | 10000000000 | false  | true   |
    +------------+------------------------+---------+--------------+-----------+-------------+--------+--------+
    2 rows in set (0.01 sec)
  • 指定規則名查詢,示例如下。

    SHOW SQL_BLOCK_RULE FOR test_rule2;
    +------------+------+---------+--------------+-----------+-------------+--------+--------+
    | Name       | Sql  | SqlHash | PartitionNum | TabletNum | Cardinality | Global | Enable |
    +------------+------+---------+--------------+-----------+-------------+--------+--------+
    | test_rule2 | NULL | NULL    | 30           | 0         | 10000000000 | false  | true   |
    +------------+------+---------+--------------+-----------+-------------+--------+--------+
    1 row in set (0.00 sec)

修改攔截規則

修改SQL攔截規則,允許對規則的每一項屬性進行修改。

語法

ALTER SQL_BLOCK_RULE rule_name 
[PROPERTIES ("key"="value", ...)];

參數說明

參數名稱

必填

參數說明

rule_name

規則名稱。

PROPERTIES

具體屬性,詳細說明請參見上文創建攔截規則

使用示例

  1. 根據SQL屬性進行修改,示例如下。

ALTER SQL_BLOCK_RULE test_rule PROPERTIES("sql"="select \\* from test_table","enable"="true")
  1. 如果一個rule設置了partition_num,那么sql或者sqlHash將無法被修改,示例如下。

ALTER SQL_BLOCK_RULE test_rule2 PROPERTIES("partition_num" = "10","tablet_num"="300","enable"="true")

刪除攔截規則

刪除SQL阻止規則,支持同時刪除多條規則。

語法

DROP SQL_BLOCK_RULE test_rule1,...

參數說明

參數名稱

必填

參數說明

test_rule1

規則名稱。支持多規則,以“,”隔開。

使用示例

刪除test_rule1、test_rule2阻止規則,示例如下。

DROP SQL_BLOCK_RULE test_rule1,test_rule2;
Query OK, 0 rows affected (0.00 sec)

攔截規則綁定用戶

如果需要為指定數據庫賬號配置攔截規則,則需要設置規則的屬性global為false,然后參考如下語句進行綁定,多個規則使用,分隔。

SET PROPERTY [FOR 'jack'] 'sql_block_rules' = 'test_rule1,test_rule2';