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列に入力します。