この例は、必要な権限を持たないユーザーが行の分類レベル値の更新においてUPDATEリクエストを送信する場合に、SELECTとUPDATEの制約をどのように適用するかを示します。SELECT制約は、ユーザーがアクセスを許可されない行をフィルタリングし、UPDATE制約は、ユーザーがターゲット行で更新操作を実行しないよう制限します。
分類レベル値は、制約列の1つであるclassification_level列に格納されます。もう1つの制約列はclassification_categoriesです。
この例でテーブルの作成に使用される文は、以下のとおりです。
CREATE TABLE rls_tbl( col1 INT, col2 INT, classification_levels CONSTRAINT, classification_categories CONSTRAINT);
ユーザーのセッション制約値は、次のとおりです。
Constraint1Name LEVELS Constraint1Value 2 Constraint3Name CATEGORIES Constraint3Value '90000000'xb
以下は、UPDATE文です。
UPDATE rls_tbl SET col1=2 where col1=1;
EXPLAINは、SELECT制約とUPDATE制約の結果を示します。RS.rls_tbl上のRETRIEVEステップは、残余条件("((SYSLIB.SELECTLEVEL (2, RS.rls_tbl.levels ))= 'T') AND ((SYSLIB.SELECTCATEGORIES ('90000000'XB, RS.rls_tbl.categories ))='T')")のプライマリ インデックス"RS.rls_tbl.col1 = 1"によって実行されます。
次に、(RS.rls_tbl.levels = SYSLIB.UPDATELEVEL (2, {LeftTable}.levels)), (RS.rls_tbl.categories = SYSLIB.UPDATECATEGORIES ('90000000'XB, {LeftTable}.categories))によって制約された更新済み行を含むRS.rls_tblへの結果のMERGE DELETEがあります。
次に、結果のRS.rls_tblへのMERGEがあります。