すべてのテーブルに完全に同一の行レベル セキュリティ制約がある場合、行レベル セキュリティのあるテーブルでINSERT ... SELECTリクエストを利用できます。
Teradata Databaseは、ターゲット テーブルの行レベル セキュリティ制約に対してはセキュリティ ポリシーUDFを実行しません。
- リクエストを実行するセッションにターゲット テーブルでDML文を使用するための適切なOVERRIDE権限が無いと、Teradata Databaseはソース テーブルからすべての行レベル セキュリティ制約列の値を取得します。
- セッションに適切なOVERRIDE権限があれば、Teradata DatabaseはINSERT … SELECTリクエストの一部として提供されない限り、ソース テーブルから制約値を取得します。
例: 単一文のINSERTリクエストのための行レベル セキュリティINSERT制約関数の適用
この例は、行レベル セキュリティINSERT制約のあるテーブルで単一文のINSERTリクエストにどのようにINSERT制約関数が適用されるかを示しています。
EXPLAIN文は、リクエストの実行に係わる手順および制約関数の適用結果を示すために使用されます。
この例でテーブルの作成に使用される文は、以下のとおりです。
CREATE TABLE rls_tbl( col1 INT, col2 INT, classification_levels CONSTRAINT, classification_categories CONSTRAINT);
ユーザーのセッション制約値は、次のとおりです。
Constraint1Name LEVELS Constraint1Value 2 Constraint3Name CATEGORIES Constraint3Value '90000000'xb
このEXPLAIN文は、INSERTリクエストの実行に係わる手順およびINSERT制約関数の適用結果を示すために使用されます。
EXPLAIN INSERT rls_tbl(1,1,,);
システムは、このEXPLAINテキストを返します。
*** Help information returned. 6 rows. *** Total elapsed time was 1 second. Explanation ------------------------------------------------------------------------ 1) First, we do an INSERT into RS.rls_tbl constrained by ( RS.rls_tbl.levels = SYSLIB.INSERTLEVEL (2)), ( RS.rls_tbl.categories = SYSLIB.INSERTCATEGORIES ('90000000'XB)). The estimated time for this step is 0.07 seconds. -> No rows are returned to the user as the result of statement 1. The total estimated time is 0.07 seconds.
例: ユーザーに必要な権限がない場合の行レベル セキュリティのINSERTおよびSELECT制約(INSERT...SELECTリクエスト)
この例は、必要なOVERRIDE権限を持たないユーザーが行レベル セキュリティのINSERTおよびSELECT制約があるテーブル上でINSERT … SELECTリクエストを実行する場合のINSERTおよびSELECT制約の適用方法を示します。
この例でテーブルの作成に使用される文は、以下のとおりです。
CREATE TABLE rls_src_tbl( col1 INT, col2 INT, classification_levels CONSTRAINT, classification_categories CONSTRAINT); CREATE TABLE rls_tgt_tbl( col1 INT, col2 INT, classification_levels CONSTRAINT, classification_categories CONSTRAINT);
ユーザーのセッション制約値は、次のとおりです。
Constraint1Name LEVELS Constraint1Value 2 Constraint3Name CATEGORIES Constraint3Value '90000000'xb
以下は、INSERT文です。
INSERT rls_tgt_tbl SELECT * FROM rls_src_tbl;
EXPLAINは、 条件が("((SYSLIB.SELECTCATEGORIES ( '90000000'XB, RS.rls_src_tbl.categories ))= 'T') AND ((SYSLIB.SELECTLEVEL (2, rls_src_tbl.levels ))= 'T')")のrls_src_tblからのRETRIEVEステップ時に適用されるINSERT制約およびSELECT制約を示します。