この例は、選択リストまたはSELECT文のWHERE句において行レベル セキュリティ制約列の名前を指定する方法を示します。
まず、行レベル セキュリティ制約を定義します。group_membership制約オブジェクトの作成テキストは次のようになります。
CREATE CONSTRAINT group_membership SMALLINT, NOT NULL, VALUES (exec:100, manager:90, clerk:50, peon:25), INSERT SYSLIB.ins_grp_member, SELECT SYSLIB.rd_grp_member;
このテーブル定義では、Teradata Databaseは、このテーブルの作成時にgroup_membershipという名前の行レベル セキュリティ制約列をemp_recordテーブルに明示的に追加します。group_membership列には、行レベル セキュリティ制約のデータが含まれます。
CREATE TABLE emp_record ( emp_name VARCHAR(30), emp_number INTEGER, salary INTEGER, group_membership CONSTRAINT) UNIQUE PRIMARY INDEX(emp_name);
emp_recordの作成後に、問合わせのための選択リスト内で該当する列の名前を指定することにより、group_membership列から指定したデータを取得するSELECT文を使用できます。
以下は、選択リストにgroup_membershipが含まれるemp_recordテーブルでのSELECT文の例です。
SELECT emp_name, group_membership FROM emp_record WHERE group_membership=90;
必須のセキュリティ クレデンシャルがある場合、この問合わせは、すべてのマネージャに対してemp_nameおよびgroup_membershipの値名および値コードを返します。必須のクレデンシャルがない場合、行は返されません。値名を検索条件として指定することはできません。値コードを指定してください。この例では、値コード90は、値名のマネージャを表わします。
次に、この行レベル セキュリティ制約および在庫テーブルを作成するとしましょう。
CREATE CONSTRAINT classification_level SMALLINT, NOT NULL, VALUES (top_secret:4, secret:3, confidential:2, unclassified:1), INSERT SYSLIB.InsertLevel, UPDATE SYSLIB.UpdateLevel, DELETE SYSLIB.DeleteLevel, SELECT SYSLIB.ReadLevel; 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; CREATE TABLE inventory ( column_1 INTEGER, column_2 INTEGER, column_3 VARCHAR(30), classification_level CONSTRAINT, classification_category CONSTRAINT) PRIMARY INDEX(column_1);
次に、ユーザーjoeがTeradata Databaseセッションにログオンします。joeの作成テキストは、次のようになります。
CREATE USER joe AS PERMANENT=1e6, PASSWORD=Joe1234, CONSTRAINT = classfication_level (top_secret), CONSTRAINT = classification_category (united_states);
ユーザーjoeはclassification_levelおよびclassification_categoryの行レベル セキュリティ制約で定義されているため、このSELECT文をインベントリについて実行できます。
SELECT * FROM inventory WHERE column_1 = 1212;
結果セットは以下のようになります。インベントリに対して明示的に定義された3つの列からのデータだけでなく、2つの行レベル セキュリティ列からのデータも返します。
column_1 column_2 column_3 classification_level classification_category -------- -------- -------- -------------------- ----------------------- 1212 90505 Widgets 3 '4000000000000000'xb