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

Data Management:リレーショナルデータベース向けの SQL コンソール

最終更新日:Mar 29, 2026

Data Management (DMS) の SQL コンソールは、実行前に各 SQL ステートメントを一連のセキュリティチェックポイントに照らして評価します。これらのチェックポイントは、どの SQL ステートメントを、誰が、どのような条件下で実行できるかを制御し、データベースのアクセスと操作を詳細に制御できます。このトピックでは、ApsaraDB RDS for MySQL を例として使用します。

仕組み

SQL コンソールで SQL ステートメントを送信すると、DMS は各ステートメントを事前定義されたチェックポイントに対して順次評価します。各チェックポイントで、DMS はファクター (プレフィックス @fac.) を読み取って、SQL タイプ、影響を受ける行数、現在のユーザーのロールなどのランタイムコンテキストを評価し、設定されたルール条件に基づいてアクション (プレフィックス @act.) を適用します。

image

チェックポイント

DMS は、次のチェックポイントに対して SQL ステートメントを順番に評価します。各チェックポイントには、独自の設定可能なルールがあります。

チェックポイント制御内容
基本設定項目クエリごとに返される最大行数、結果セットを変更できるかどうか、機密データを計算に含めることができるかどうか
SQL 実行数量基準一度に送信できる SQL ステートメントの最大数
DQL SQL 基準データクエリ言語 (DQL) ステートメントの実行制約
その他の SQL 基準複数の SQL タイプに対する実行制約 (例:認識されない SQL の許可、全テーブル削除のブロック)
SQL 権限基準データベース、テーブル、機密列、および行に対する権限に基づく実行制約
SQL 実行パフォーマンス基準影響を受ける表領域がサイズ制限を超えた場合に DDL ステートメントをブロックするか、影響を受ける行数が制限を超えた場合に DML ステートメントをブロックします
データベースおよびテーブル列権限の例外認識基準解析例外が発生した場合に、DQL、DML、DDL、またはデータ制御言語 (DCL) ステートメントを続行するか拒否するかを決定します
論理データベースにおける SQL 実行基準論理データベースに対して実行される SQL ステートメントの実行制約

DMS は、各チェックポイントに対して事前定義された設定とルールを提供します。これらをカスタマイズする方法については、「セキュリティルールの管理」トピックのセキュリティルールの設定セクションをご参照ください。

ファクターとアクション

ファクター

ファクターは、DMS がセキュリティルール条件で使用するために公開する事前定義された変数です。ファクターは、ステートメントが全テーブルに影響を与えるかどうか、現在のユーザーが DBA であるかどうかなどのランタイムコンテキストをキャプチャします。

ファクター名は @fac.<display-name> のフォーマットを使用します。

セキュリティルールセットの詳細ページの各モジュールは、そのチェックポイントに固有のファクターセットを提供します。

SQL コンソールが提供するファクター

ファクター説明
@fac.sql_count一度に送信される SQL ステートメントの数
@fac.select_sql_count送信された SQL ステートメントの中の DQL ステートメントの数
@fac.dml_sql_count送信された SQL ステートメントの中のデータ操作言語 (DML) ステートメントの数
@fac.sql_typeSQL ステートメントのカテゴリ。有効な値については、「SQL ステートメントのタイプ」をご参照ください。
@fac.sql_sub_typeSQL ステートメントのサブカテゴリ。有効な値については、「SQL ステートメントのタイプ」をご参照ください。
@fac.env_typeインスタンスの環境タイプ。環境名 (DEVPRODUCT など) として表示されます。詳細については、「インスタンスの環境タイプを変更する」をご参照ください。
@fac.fulltable_deleteステートメントが全テーブルを削除するかどうか。有効な値: truefalse
@fac.fulltable_updateステートメントが全テーブルを更新するかどうか。有効な値: truefalse
@fac.current_sql現在の SQL ステートメント
@fac.user_is_admin現在のユーザーが DMS 管理者であるかどうか。有効な値: truefalse
@fac.user_is_dba現在のユーザーがデータベース管理者 (DBA) であるかどうか。有効な値: truefalse
@fac.user_is_inst_dba現在のユーザーが現在のデータベースインスタンスの DBA であるかどうか。有効な値: truefalse
@fac.user_is_sec_admin現在のユーザーがセキュリティ管理者であるかどうか。有効な値: truefalse
@fac.sql_affected_rows現在のステートメントが影響を与える行数。
説明

このファクターは COUNT 操作をトリガーします。このファクターは注意して使用してください。

@fac.sql_relate_table_store_size現在のステートメントがアクセスするテーブルの推定合計サイズ (MB)。この値は DMS メタデータに基づいて推定されたものであり、実際の値ではありません。

アクション

アクションは、ルールの IF 条件が満たされたときに DMS が実行する内容を定義します。たとえば、ステートメントの許可または拒否、ユーザーが機密列に対する権限を持っているかどうかの確認などです。

アクション名は @act.<display-name> のフォーマットを使用します。

セキュリティルールセットの詳細ページの各モジュールは、そのチェックポイントに固有のアクションセットを提供します。

SQL コンソールが提供するアクション

アクション説明
@act.reject_execute現在の SQL ステートメントを拒否します
@act.allow_execute現在の SQL ステートメントを許可します
@act.reject_sql_type_execute特定のサブカテゴリの SQL ステートメントを拒否します。サブカテゴリを引数として指定します。例: @act.reject_sql_type_execute 'UPDATE'
@act.allow_sql_type_execute特定のサブカテゴリの SQL ステートメントを許可します。サブカテゴリを引数として指定します。例: @act.allow_sql_type_execute 'UPDATE'
@act.check_dml_sec_column_permissionユーザーが機密列に対する権限を持っているかどうかを確認します。持っていない場合、DML ステートメントは実行されません。
@act.uncheck_dml_sec_column_permissionDML ステートメントの機密列権限の確認をスキップします
@act.check_sql_access_permissionユーザーがステートメントに関与するデータベース、テーブル、または列に対して必要な権限 (読み取り権限や書き込み権限など) を持っているかどうかを確認します
@act.uncheck_sql_access_permissionアクセス権限の確認をスキップします
@act.enable_sec_column_maskこれらの列に対する権限を持たないユーザーのクエリ結果セット内の機密列をマスクします
@act.disable_sec_column_maskこれらの列に対する権限を持たないユーザーのクエリ結果セット内の機密列をマスクしません

SQL ステートメントのタイプ

DMS は SQL ステートメントを 4 つのカテゴリに分類します。@fac.sql_type ファクターはカテゴリを返し、@fac.sql_sub_type は以下にリストされている特定のステートメントタイプを返します。

DML

INSERT, INSERT_SELECT, SELECT_INTO, MULTI_INSERT, REPLACE, REPLACE_INTO, UPDATE, DELETE, MERGE, REMOVE, MSCK_REPAIR, REFRESH_MATERIALIZED_VIEW, BEGIN, START_TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT, RELEASE_SAVEPOINT, SET, ADD_EDGE, ADD_VERTEX, SET_PROPERTY, GDB_DROP, INSERT_MANY, INSERT_ONE, DELETE_MANY, DELETE_ONE, UPDATE_MANY, UPDATE_ONE, WLM_ADD_RULE

DDL

CREATE, CREATE_SCHEMA, CREATE_INDEX, CREATE_VIEW, CREATE_SEQUENCE, CREATE_TABLE, CREATE_TABLEGROUP, CREATE_PACKAGE, CREATE_SELECT, TRUNCATE, DROP, DROP_SCHEMA, DROP_INDEX, DROP_VIEW, DROP_TABLE, DROP_TABLEGROUP, DROP_SEQUENCE, RENAME, ALTER_TABLE_DROP_COLUMN, ALTER_TABLE_CHARACTER_COLLATE, ALTER_TABLE_AUTOINCREMENT, ALTER, ALTER_SCHEMA, ALTER_INDEX, ALTER_VIEW, ALTER_TABLE, ALTER_TABLEGROUP, ALTER_SEQUENCE, CREATE_FUNCTION, ALTER_FUNCTION, DROP_FUNCTION, CREATE_PROCEDURE, ALTER_PROCEDURE, DROP_PROCEDURE, MONGO_CREATE_INDEX, MONGO_DROP_INDEX, CREATE_DATABASE, ALTER_DATABASE, DROP_DATABASE, CREATE_USER, ALTER_USER, DROP_USER, CREATE_ROLE, DROP_ROLE, EXEC, CALL_PROCEDURE, CREATE_TRIGGER, ALTER_TRIGGER, DROP_TRIGGER, CREATE_EVENT, ALTER_EVENT, DROP_EVENT, ROLLBACK_DDL, CANCEL_DDL, VACUUM, SUBMIT_JOB, CANCEL_JOB, BUILD_TABLE, IF

DQL

データクエリ言語 (DQL) ステートメントは、データを変更せずに取得します。

SELECT, DESC, EXPLAIN, SHOW_INDEX, SHOW, CHECK_TABLE, SHOW_DDL, LIST, GDB_QUERY, CHECKSUM, SELECT_PG_TERMINATION_BACKEND, WLM_LIST_RULE

DCL

データ制御言語 (DCL) ステートメントは、データベースアクセスとセッション状態を管理します。

GRANT, DECLARE, SET, ANALYZE, FLUSH, OPTIMIZE, KILL, RECOVER_DDL, REMOVE_DDL, SELECT_PG_TERMINATION_BACKEND

よくある質問

  • Q: 'select *' SQL ステートメントの実行を制限できますか?

    A: これは、セキュリティコラボレーションパターンが有効になっているインスタンスにのみ適用されます。

    1. DMS の上部のメニューバーで、セキュリティとディザスタリカバリ (DBS) > セキュリティルールを選択します。

    2. 仕様管理タブで、ご利用のデータエンジンタイプに対応するルールセットを選択します。

    3. 宛先ルールを見つけ、操作列で 編集ボタンをクリックして 詳細ページを開きます。

    4. 左側のナビゲーションウィンドウで、SQL コンソールを選択します。チェックポイントセクションで、SQL 実行数量仕様を選択します。

    5. ルールの追加をクリックし、設定用の DSL スクリプトを入力します。

      if 
        @fac.sql_sub_type in ['SELECT'] 
        AND @fun.is_contain_str(@fac.current_sql,'*') 
      then 
        @act.reject_execute 'SQL ステートメントに * が含まれています。別の方法を使用してください。' 
      end
  • Q: DMS SQL コンソールで大規模なクエリに制限を設定するにはどうすればよいですか?

    A: この操作には、セキュリティコラボレーションモードが有効になっているインスタンスが必要です。

    1. DMS の上部のメニューバーで、セキュリティとディザスタリカバリ (DBS) > セキュリティルールを選択します。

    2. 仕様管理タブで、ご利用のデータエンジンタイプに対応するルールセットを選択します。

    3. 宛先ルールを見つけ、操作列の 編集をクリックして 詳細ページに移動します。

    4. 左側のナビゲーションウィンドウで、SQL コンソールを選択します。検索バーに「full table scan」と入力し、検索ボタンをクリックします。

    5. 表示されたリストで宛先ルールを選択し、編集ボタンをクリックして設定します。