OVERRIDE権限を持たないユーザーが、RLSテーブルでINSERTまたはUPDATEを実行する場合、割り当てられたユーザー制約でバイト値として定義されているセッション制約値を16進数コードに変換し、テーブルに読み込みます。
例えば、次のように仮定します。
- Countriesという名前のBYTE(1)非階層制約がこれらの値で定義されます。
- USA: 1
- UK: 2
- Canada: 3
- ユーザーU1がこの制約に割り当てられます。
CONSTRAINT = Countries (USA, UK, Canada)
- ユーザーU1でCountries制約列を含むテーブルを定義します。
CT rls_table (x INT, Countries CONSTRAINT);
- 関連INSERT UDFで定義されているセキュリティ ポリシーは、ユーザーのセッション制約を変更しません。
ログオン時に、ユーザーU1のセッション制約値はシステムによって次のように計算されます。
制約値 | ビット位置 | バイナリ値 |
---|---|---|
USA:1 | 1 | 1 |
UK:2 | 2 | 1 |
Canada: 3 | 3 | 1 |
該当なし | 4 | 0 |
5 | 0 | |
6 | 0 | |
7 | 0 | |
8 | 0 |
システムは割り当てられたユーザー制約を評価し、バイナリ文字列を計算して、非階層値の各セットを表わします。上の例では、11100000で、これは16進数文字列‘E0’xbに変換されます。
ユーザーU1がテーブルrls_tblに行を挿入する場合、システムは自動的に計算された16進数値'E0' xbをテーブルのCountries CONSTRAINT列に入力します。
セッション制約のリセット
ユーザーには、SET SESSION CONSTRAINT文を使用して、セッションで使用できるデフォルトの制約値を変更するオプションがあります。
前の例に基づいて、U1はセッションのデフォルトのCountries制約をリセットする可能性があります。
SET SESSION CONSTRAINT = Countries (UK, Canada);
セッションの制約値は、上記の‘E0’xbから'60' xb (01100000 の16進数表記)に変更されます。Countries制約列の後続の挿入値はセッション中、デフォルトで'60'xbになります。
HELP SESSION CONSTRAINT文を使用してデフォルトの制約値の16進数文字列を表示できます。