16.20 - level_name - Teradata Database - Teradata Vantage NewSQL Engine

Teradata Vantage™ SQLデータ定義言語 構文規則および例

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Release Date
2019年3月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-162K-JPN
Language
日本語 (日本)

階層レベルの名前、デフォルト レベルを置換するconstraint_nameに対して有効。

指定されているlevel_nameは、現在ユーザーに割り当てられている必要があります。割り当てられていない場合、Teradata Databaseは要求元にエラーを返します。

例で使用する制約の定義

ここで取り上げる例では、以下の制約とユーザーの定義を使用します。

以下のSQLテキストでは、制約で可能な4つのステートメント アクションをすべて適用する階層型制約classification_levelを作成します。

     CREATE CONSTRAINT classification_level SMALLINT, NOT NULL,
     VALUES (top_secret:4, secret:3, confidential:2, unclassified:1), 
     INSERT SYSLIB.insert_level,
     UPDATE SYSLIB.update_level,
     DELETE SYSLIB.delete_level,
     SELECT SYSLIB.read_level;

以下のSQLテキストでは、制約で可能な4つのステートメント アクションをすべて適用する非階層型制約classification_categoryを作成します。

     CREATE CONSTRAINT classification_category BYTE(8),  
     VALUES (nato:1, united_states:2, canada:3, united_kingdom:4,
             france:5, norway:6, russia:7), 
     INSERT SYSLIB.insert_category,
     UPDATE SYSLIB.update_category,
     DELETE SYSLIB.delete_category,
     SELECT SYSLIB.read_category;

user_nameを作成します。

     CREATE USER  user_name  AS
     PERMANENT = 1e6, 
     PASSWORD=my_pwd,
     CONSTRAINT = classfication_level (top_secret),
     CONSTRAINT = classification_category (united_states);

ユーザーplsを作成します。

     CREATE USER  pls  AS
     PERMANENT = 1e6, 
     PASSWORD=secret,
     CONSTRAINT = classification_level (secret, unclassified DEFAULT),
     CONSTRAINT = classification_category (united_states);

以下のSQLテキストでは、ユーザーarn_andersonを作成します。

     CREATE USER  arn_anderson  AS
     PERMANENT = 1e6, 
     PASSWORD=Arn2222ANDERSON,
     CONSTRAINT = classification_category (norway);

例: セッションのセキュリティ レベルとセキュリティ カテゴリの変更

user_nameでログオンします。そのセッションには、unclassifiedレベルとnatoカテゴリのラベルが付きます。そのセッションで実行する最初のリクエストで、そのラベルをtop_secretのレベルおよびunited_statesnatoの組み合わせのカテゴリに変更します。

     SET SESSION CONSTRAINT = classification_level (top_secret), 
     CONSTRAINT = classification_category  (nato, united_states);

後に、user_nameが開始したセッションで、inventoryの3つの行のいずれかを読み取るとします。その場合、ユーザーは以下のSELECTリクエストを実行します。

     SELECT * 
     FROM inventory 
     WHERE col_1 = 1212;

返される結果セットは、以下のようになります。

Col_1	 Col_2	 Col_3   		Classification_Level  	Classification_Category
=====  ===== =====   ====================  =======================
1212	 90505	 Widgets	 3			                     '0100000000000000'XB

例: セッションの行レベル セキュリティ レベルの変更

ユーザーplsがログオンします。そのセッションには、unclassifiedレベルとnatoカテゴリのラベルが付きます。セッションが確立されるとすぐに、plsはレベルをsecretに変更します。

     SET SESSION CONSTRAINT = classification_level (secret);

SET SESSION CONSTRAINTリクエストの実行後に、セッションのラベルは、secretnatoのラベルになります。

plsが開始したセッションを使用して、inventoryという表に3つの行を挿入するとします。inventoryに行を挿入するINSERTリクエストは、以下のようになります。

     INSERT INTO inventory VALUES (1212, 90505,'Widgets',,);
     INSERT INTO inventory VALUES (12122, 90504,'Buggy Whips',,);
     INSERT INTO inventory VALUES (12126, 90501,'Whip Sockets',,);

最後の2つの定位置値は、セッションではなくINSERTの制約UDFによって生成されます。

これらのINSERTリクエストが完了すると、各行の列値は以下のようになります。

inventory        
col_1 col_2 col_3 classification_level classification_category
1212 90505 Widget 3 ‘0100000000000000'XB
12122 90504 Buggy Whips 3 ‘0100000000000000'XB
12126 90501 Whip Sockets 3 ‘0100000000000000'XB