すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB for SelectDB:SQL ブロッキング

最終更新日:Jan 16, 2025

このトピックでは、 が提供する SQL ブロッキング機能を使用して SQL クエリを管理する方法について説明します。 ApsaraDB for SelectDB

概要

本番環境では、DELETE ステートメントやリスクの高い SQL ステートメントなどをブロックするなど、実行できる SQL ステートメントを制限する必要がある場合があります。このようなシナリオの要件を満たすために、ApsaraDB for SelectDB は SQL ブロッキング機能を提供します。 ApsaraDB for SelectDB で実行する SQL ステートメントが SQL ブロッキングルールと一致する場合、ApsaraDB for SelectDB は SQL ステートメントの実行を阻止し、エラーメッセージを返します。

SQL ブロッキングルールの作成

DDL ステートメントと DML ステートメントを含むすべての SQL ステートメントを制限する SQL ブロッキングルールを作成できます。データベースアカウントに基づいて SQL ブラックリストを設定することもできます。

次のいずれかの方法を使用して、SQL ブロッキングルールを設定できます。

  • 正規表現を使用して、指定された SQL クエリを照合して拒否します。

  • クエリが partition_num、tablet_num、および cardinality パラメーターで指定されたしきい値のいずれかに達しているかどうかを確認します。これらのパラメーターを使用して、同時にしきい値を指定できます。クエリがしきい値のいずれかに達すると、クエリはブロックされます。

構文

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

パラメーター

パラメーター

必須

説明

rule_name

はい

SQL ブロッキングルール名。

PROPERTIES

はい

SQL ブロッキングルールのプロパティ。詳細については、次の表を参照してください。

次の表は、PROPERTIES パラメーターで指定できる一般的なパラメーターについて説明しています。

パラメーター

必須

説明

sql

いいえ

正規表現を使用して指定された一致ルール。特殊文字はエスケープする必要があります。たとえば、select *select \\* にエスケープされます。デフォルト値: NULL。ルールの末尾にセミコロン(;)は必要ありません。

sqlHash

いいえ

完全一致に使用される SQL ハッシュ値。デフォルト値: NULL。このパラメーターの値は fe.audit.log に記録されます。 sql パラメーターと sqlHash パラメーターは相互に排他的です。

partition_num

いいえ

スキャンノードでスキャンできるパーティションの最大数。デフォルト値: 0L(制限なし)。

tablet_num

いいえ

スキャンノードでスキャンできるタブレットの最大数。デフォルト値: 0L(制限なし)。

cardinality

いいえ

スキャンノードによって概算でスキャンされる行数。デフォルト値: 0L(制限なし)

global

いいえ

すべてのデータベースアカウントに対してルールを有効にするかどうかを指定します。デフォルト値: false

enable

いいえ

SQL ブロッキングルールを有効にするかどうかを指定します。デフォルト値: true

  • test_rule という名前の SQL ブロッキングルールを作成します。サンプルコード:

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

    実行しようとする SQL クエリが上記の SQL ブロッキングルールと一致する場合、次のエラーメッセージが返されます:

    SELECT * FROM order_analysis;
    ERROR 1064 (HY000): errCode = 2, detailMessage = sql match regex sql block rule: order_analysis_rule
  • test_rule2 という名前の SQL ブロッキングルールを作成します。 partition_num パラメーターを 30 に、cardinality パラメーターを 10000000000 に設定します。サンプルコード:

    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 ブロッキングルールを作成します。 () は正規表現の特殊文字であり、エスケープする必要があります。

    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 ブロッキングルールのクエリクエリルール

設定済みの SQL ブロッキングルールをクエリできます。クエリする SQL ブロッキングルール名を指定しない場合は、すべての SQL ブロッキングルールがクエリされます。

構文

SHOW SQL_BLOCK_RULE [FOR RULE_NAME];

パラメーター

パラメーター

必須

説明

rule_name

いいえ

SQL ブロッキングルール名。

  • すべての SQL ブロッキングルールをクエリします。サンプルコード:

    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)
  • 指定された SQL ブロッキングルールをクエリします。サンプルコード:

    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 ブロッキングルールの変更変更するルール

SQL ブロッキングルールのパラメーターはすべて変更できます。

構文

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

パラメーター

パラメーター

必須

説明

rule_name

はい

SQL ブロッキングルール名。

PROPERTIES

いいえ

SQL ブロッキングルールのプロパティ。詳細については、このトピックのSQL ブロッキングルールの作成セクションを参照してください。

  1. SQL ブロッキングルールの PROPERTIES パラメーターを変更します。サンプルコード:

ALTER SQL_BLOCK_RULE test_rule PROPERTIES("sql"="select \\* from test_table","enable"="true")
  1. SQL ブロッキングルールに partition_num パラメーターが指定されている場合、sql パラメーターまたは sqlHash パラメーターを変更することはできません。サンプルコード:

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

SQL ブロッキングルールの削除削除ルール

一度に 1 つ以上の SQL ブロッキングルールを削除できます。

構文

DROP SQL_BLOCK_RULE test_rule1,...

パラメーター

パラメーター

必須

説明

test_rule1

はい

SQL ブロッキングルール名。複数のルール名を指定できます。ルール名はカンマ(,)で区切ります。

test_rule1 と test_rule2 という名前の SQL ブロッキングルールを削除します。サンプルコード:

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

特定のデータベースアカウントに 1 つ以上の SQL ブロッキングルールを関連付ける特定のデータベースアカウントに1つ以上のSQLブロックルールを関連付ける

特定のデータベースアカウントに 1 つ以上の SQL ブロッキングルールを設定する場合、ルールの global パラメーターを false に設定します。次に、次のステートメントを実行して、1 つ以上の SQL ブロッキングルールをデータベースアカウントに関連付けます。複数の SQL ブロッキングルール名はカンマ(,)で区切ります。

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