例: 行レベル セキュリティ制約がかかっているテーブルの作成 - Teradata Database - Teradata Vantage NewSQL Engine

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

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語 (日本)
Last Update
2019-10-29
dita:mapPath
ja-JP/wkf1512081455740.ditamap
dita:ditavalPath
ja-JP/wkf1512081455740.ditaval
dita:id
B035-1144
Product Category
Software
Teradata Vantage

この例では、classification_levelclassification_categoryは以前に定義されていた制約の名前です。 classification_levelclassification_category CONSTRAINTオブジェクトの作成テキストは以下のようになります。

     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 ;
     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 ;

Teradata Databaseは、テーブル作成時に、行レベル制約列classification_levelclassification_categoryの列定義をtable_1_rls_constraintsの定義に暗黙的に追加します。CONSTRAINTオブジェクトに指定されている関数定義は、table_1_rls_constraintsの行にアクセスするSQLリクエストで行レベル セキュリティ制御として実行されます。

     CREATE TABLE table_1_rls_constraints (
       column_1 INTEGER,
       column_2 CHARACTER(30), 
       classification_level    CONSTRAINT, 
       classification_category CONSTRAINT)
     UNIQUE PRIMARY INDEX(col1);

group_membership CONSTRAINTオブジェクトの作成テキストはこのようになります。これは、4つの値名:値コードの対を定義する階層型制約です。

     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_tableを作成した後、group_membership列のデータを取得するSELECTリクエストを問合わせのための選択リストで選択して実行依頼することができます。その選択リストにgroup_membershipを含むテーブルemp_recordのSELECTリクエストは以下のようになります。

     SELECT emp_name, group_membership
     FROM emp_record
     WHERE group_membership=90;

適切な行レベル セキュリティ資格情報のあるユーザーについて、このリクエストはすべてのマネージャのemp_namegroup_membershipコードを返します。検索条件として値名を指定できないことに注意してください。代わりに、値コードを指定しなければなりません。この例では、値コード90は値名managerを表わします。

group_membership 90を読み取る行レベル セキュリティ資格情報のないユーザーについては、このリクエストは0行を返します。

この情報は、DBC.AsgdSecConstraintsから取得することもできます。