この例では、classification_levelとclassification_categoryは以前に定義されていた制約の名前です。 classification_levelとclassification_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_levelとclassification_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_nameとgroup_membershipコードを返します。検索条件として値名を指定できないことに注意してください。代わりに、値コードを指定しなければなりません。この例では、値コード90は値名managerを表わします。
group_membership 90を読み取る行レベル セキュリティ資格情報のないユーザーについては、このリクエストは0行を返します。