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

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

Product
Advanced SQL Engine
Teradata Database
Release Number
17.10
Release Date
2021年7月
Content Type
プログラミング リファレンス
Publication ID
B035-1144-171K-JPN
Language
日本語 (日本)

この例では、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 ;

Vantageは、テーブル作成時に、行レベル制約列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 ;

この テーブル定義においてVantageは、テーブル作成時に、暗黙的に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から取得することもできます。