5.4 SYS_CONTEXT属性を使用するポリシー式
アプリケーションによって移入されるSYS_CONTEXT
属性に依存するポリシー式を記述するときは、注意してください。
ユーザーが(アプリケーションを通じてではなく)なんらかの方法で直接接続した場合、SYS_CONTEXT
属性は移入されません。ポリシー式でこのNULL
シナリオを処理しないと、意図せずに実際のデータを問合せユーザーに開示してしまうことがあります。
たとえば、クライアント識別子の値がSUPERVISOR
であるユーザー以外のすべてのユーザーに問合せ結果をリダクションする目的でポリシー式を作成するとします。次の式では、CLIENT_IDENTIFIER
の値がNULL
である問合せユーザーに、意図せずに実際のデータが表示されます。
SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') IS NOT 'SUPERVISOR'
ポリシー式をより厳密にすると、クライアント識別子が設定されていない場合(NULL
値である場合)、問合せ結果はリダクションされます。
SYS_CONTEXT('USERENV', 'CLIENT_IDENTIFIER') IS NOT 'SUPERVISOR' OR IS NULL
SQLでは、NULL
との比較は未定義であるため、FALSE
になりますが、リダクションはポリシー式がTRUE
に評価された場合にのみ実行されることに注意してください。