例: ユーザーに必要な権限がない場合の行レベル セキュリティSELECTおよびUPDATE制約の適用(UPDATEリクエスト) - Teradata Database - Teradata Vantage NewSQL Engine - 例: ユーザーに必要な権限がない場合の行レベル セキュリティSELECTおよびUPDATE制約の適用(UPDATEリクエスト)

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/fbo1512081269404.ditamap
dita:ditavalPath
ja-JP/fbo1512081269404.ditaval
dita:id
B035-1146
Product Category
Software
Teradata Vantage

この例は、必要な権限を持たないユーザーが行の分類レベル値の更新において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があります。