Data Management (DMS) では、SQL コンソールモジュールでの操作に対するセキュリティルールを設定できます。SQL コンソールでは、リレーショナルデータベースと非リレーショナルデータベースを管理できます。このトピックでは、SQL コンソールでの操作に関するセキュリティルールについて説明します。この例では、ApsaraDB RDS for MySQL のセキュリティルールを使用します。
SQL コンソールのチェックポイント
チェックポイント | 説明 |
基本設定項目 | クエリごとに返される最大行数、結果セットを変更できるかどうか、機密データを計算できるかどうかなどの基本設定を指定できます。 |
SQL 実行数量基準 | 一度に送信できる SQL ステートメントの数を制限できます。 |
DQL SQL 基準 | データクエリ言語 (DQL) ステートメントの実行に制約を設定できます。 |
その他の SQL 基準 | 複数種類の SQL ステートメントの実行に制約を設定できます。たとえば、未確認の SQL ステートメントの実行を許可し、全テーブルを削除するステートメントの実行を拒否できます。 |
SQL 権限基準 | データベース、テーブル、機密列、行に対する権限に基づいて、SQL ステートメントの実行に制約を設定できます。 |
SQL 実行パフォーマンス基準 | 関連する表領域のサイズが上限を超えた場合に DDL ステートメントの実行を拒否したり、影響を受ける行数が上限を超えた場合に DML ステートメントの実行を拒否したりできます。 |
データベースとテーブル列権限の例外認識基準 | 解析例外が発生した場合に、DQL、DML、DDL、またはデータ制御言語 (DCL) ステートメントなどの SQL ステートメントの実行を続行するか拒否するかを指定できます。 |
論理データベースにおける SQL 実行基準 | さまざまな種類の SQL ステートメントの実行に制約を設定できます。 |
DMS は、チェックポイント用に多数の事前定義された設定とルールを提供します。ビジネス要件に基づいて、設定の変更、ルールのステータスの変更、セキュリティルールのカスタマイズが可能です。詳細については、「セキュリティルールの管理」トピックの「ルールセット内のルールの設定」セクションをご参照ください。
以下のフローチャートは、チェックポイントの仕組みを示しています。
ファクターとアクション
ファクターは、DMS が提供する事前定義された変数です。ファクターを使用して、SQL ステートメントのカテゴリや影響を受けるデータ行数など、セキュリティルールによって検証されるコンテキストを取得できます。
すべてのファクターは
@fac.で始まり、その後にファクター名が続きます。セキュリティルールセットの [詳細] ページの各モジュールは、チェックポイントごとに異なるファクターを提供します。
表 1. SQL コンソールモジュールが提供するファクター
ファクター
説明
@fac.sql_count
一度に送信される SQL ステートメントの数。
@fac.select_sql_count
一度に送信される SQL ステートメントの中の DQL ステートメントの数。
@fac.dml_sql_count
一度に送信される SQL ステートメントの中の DML ステートメントの数。
@fac.sql_type
SQL ステートメントのカテゴリ。詳細については、このトピックの「DMS で実行可能な SQL ステートメント」セクションをご参照ください。
@fac.sql_sub_type
SQL ステートメントのサブカテゴリ。詳細については、このトピックの「DMS で実行可能な SQL ステートメント」セクションをご参照ください。
@fac.env_type
環境タイプ。値は
DEVやPRODUCTなどの環境識別子です。詳細については、「インスタンスの環境タイプ」をご参照ください。@fac.fulltable_delete
現在の SQL ステートメントが全テーブルの
DELETEかどうかを示します。有効な値は次のとおりです。true
false
@fac.fulltable_update
現在の SQL ステートメントが全テーブルの
UPDATEかどうかを指定します。有効な値:true
false
@fac.current_sql
現在の SQL ステートメント。
@fac.user_is_admin
現在のユーザーが DMS 管理者であるかどうかを示します。有効な値:
true
false
@fac.user_is_dba
現在のユーザーがデータベース管理者 (DBA) であるかどうかを示します。有効な値:
true
false
@fac.user_is_inst_dba
現在のユーザーが現在のデータベースインスタンスの DBA であるかどうかを示します。有効な値:
true
false
@fac.user_is_sec_admin
現在のユーザーがセキュリティ管理者であるかどうかを示します。有効な値:
true
false
@fac.sql_affected_rows
現在の SQL ステートメントによって影響を受ける行数。
説明COUNT操作が実行されるため、注意してご使用ください。@fac.sql_relate_table_store_size
現在の SQL ステートメントがアクセスするテーブルの推定合計サイズ。単位:MB。
説明この値は DMS が取得したメタデータに基づいて推定されたものであり、実際の値ではありません。
アクション:
if条件が満たされたときにシステムが実行する動作。このアクションは、チケットの送信の禁止、承認プロセスの選択、実行の許可、実行の拒否など、セキュリティルールの主な目的を表します。すべてのアクションは
@act.で始まり、その後にアクション名が続きます。セキュリティルールセットの [詳細] ページの各モジュールは、チェックポイントごとに異なるアクションを提供します。
表 2. SQL コンソールモジュールが提供するアクション
アクション
説明
@act.reject_execute
現在の SQL ステートメントの実行を拒否します。
@act.allow_execute
現在の SQL ステートメントの実行を許可します。
@act.reject_sql_type_execute
特定の種類の SQL ステートメントを拒否するには、SQL サブタイプを指定する必要があります。例:
@act.reject_sql_type_execute 'UPDATE'。@act.allow_sql_type_execute
特定の種類の SQL の実行を許可するには、正確な SQL サブタイプを指定する必要があります。例:
@act.allow_sql_type_execute 'UPDATE'。@act.check_dml_sec_column_permission
ユーザーが機密フィールドに対する権限を持っているかどうかを確認します。ユーザーが必要な権限を持っていない場合、データ変更のための DML ステートメントは実行されません。
@act.uncheck_dml_sec_column_permission
ユーザーが機密フィールドに対する権限を持っているかどうかを確認しません。
@act.check_sql_access_permission
実行される SQL ステートメントに関与するデータベース、テーブル、またはフィールドに対して、ユーザーが特定の権限を持っているかどうかを確認します。たとえば、ユーザーがデータをクエリする権限やデータを変更する権限を持っているかどうかを確認できます。
@act.uncheck_sql_access_permission
実行される SQL ステートメントに関与するデータベース、テーブル、またはフィールドに対して、ユーザーが特定の権限を持っているかどうかを確認しません。
@act.enable_sec_column_mask
機密フィールドに対する権限を持たないユーザーによって送信された SQL ステートメントに対して返されるクエリ結果セット内の機密フィールドをマスクします。
@act.disable_sec_column_mask
機密フィールドに対する権限を持たないユーザーによって送信された SQL ステートメントに対して返されるクエリ結果セット内の機密フィールドをマスクしません。
DMS で実行可能な SQL ステートメント
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
SELECT
DESC
EXPLAIN
SHOW_INDEX
SHOW
CHECK_TABLE
SHOW_DDL
LIST
GDB_QUERY
CHECKSUM
SELECT_PG_TERMINATION_BACKEND
WLM_LIST_RULE
DCL
GRANT
DECLARE
SET
ANALYZE
FLUSH
OPTIMIZE
KILL
RECOVER_DDL
REMOVE_DDL
SELECT_PG_TERMINATION_BACKEND
よくある質問
Q:
SELECT *ステートメントの実行を制限できますか。A: はい。このアクションには、セキュリティコラボレーションモードが有効になっているインスタンスが必要です。
DMS コンソールの上部のナビゲーションバーで、[セキュリティと障害復旧] > [セキュリティルール] を選択します。
[ルールセット] タブで、ご利用のデータエンジンタイプに対応するルールセットを選択します。
対象のルールセットを見つけ、[操作] 列の [編集] をクリックして [詳細] ページに移動します。
左側のナビゲーションウィンドウで、[SQL コンソール] を選択します。[チェックポイント] で、[SQL 実行数量基準] を選択します。
[ルールの追加] をクリックし、次の DSL スクリプトを入力します。
if @fac.sql_sub_type in ['SELECT'] AND @fun.is_contain_str(@fac.current_sql,'*') then @act.reject_execute 'SQL ステートメントに * が含まれています。別の方法を使用してください。' end
Q: SQL コンソールで大規模なクエリを制限するルールを設定するにはどうすればよいですか。
A: このアクションには、セキュリティコラボレーションモードが有効になっているインスタンスが必要です。
DMS コンソールの上部のナビゲーションバーで、[セキュリティと障害復旧] > [セキュリティルール] を選択します。
[ルールセット] タブで、ご利用のデータエンジンタイプに対応するルールセットを選択します。
対象のルールセットを見つけ、[操作] 列の [編集] をクリックして [詳細] ページに移動します。
左側のナビゲーションウィンドウで、[SQL コンソール] を選択します。検索ボックスに「全表スキャン」と入力し、[検索] ボタンをクリックします。
リストから対象のルールを選択し、その [編集] ボタンをクリックして設定します。