階層レベルの名前、デフォルト レベルを置換する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_statesとnatoの組み合わせのカテゴリに変更します。
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リクエストの実行後に、セッションのラベルは、secretとnatoのラベルになります。
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 |