カスタムポリシー¶
カスタムポリシーは、Virtual DataPort サーバーがビューに対してクエリを実行する前に呼び出されるクエリインターセプターです。カスタムポリシーは行制限に似ていますが、カスタマイズできるという利点があります。
カスタムポリシーが割り当てられているビューに対してユーザーがクエリを実行する際に、ポリシーによって以下のいずれかのアクションを実行できます。
クエリを拒否する。
制限なしにクエリを承認する。
クエリを承認するが、制限を加える (クエリが返す行を制限する、フィルタ条件を追加するなど)。
これらのアクションから 1 つを選択するために、カスタムポリシーは、クエリのコンテキストの以下のようなパラメータにアクセスして、処理をどのように進めるかを決定します。
ユーザーが実行したいクエリ
ユーザーの名前と権限
JMX を介して Virtual DataPort のデータにアクセスするためにそのポリシーで使用できる、サーバーへの JMX コネクション
...
カスタムポリシーは再利用可能です。つまり、以下のことが可能です。
カスタムポリシーは行制限と同様のものであるため、行制限と同じように割り当てます。したがって、複数のビューに対する同じカスタムポリシーをユーザーまたはロールに割り当てることができます。
カスタムポリシーでは構成パラメータを定義できます。あるビューに対するポリシーをユーザーまたはロールに割り当てている場合、構成パラメータで動作をカスタマイズできます。この機能により、1 つのポリシーの動作を、割り当て先のユーザーまたはロールに応じて調整できます。たとえば、あるロールを持つユーザーが特定のビューに対して同時に実行できるクエリの数を制限するポリシーを開発する場合、この数をポリシーのパラメータにすることができます。これにより、このポリシーを「developer」のロールに割り当てるときと、「application」のロールに割り当てるときとで異なる制限を設定できます。
ユーザーがビューに対してクエリを実行する際に、そのユーザーにこのビューに対するカスタムポリシーが割り当てられている場合、ポリシーは次のように評価されます。
クエリを実行するユーザーが管理者、データベースの管理者、または「serveradmin」のロールを持つユーザーのいずれかである場合、カスタムポリシーは適用 されません 。
ユーザーがロールを持っておらず、そのビューに対するカスタムポリシーを割り当てられている場合、サーバーはポリシーを 1 つずつ評価します。いずれかのポリシーによってクエリが拒否された場合、クエリは拒否されます。
ユーザーに 1 つ以上のロールが割り当てられている場合 (それらのロールにさらに別のロールが割り当てられていることもあります)、カスタムポリシーの評価はグループ単位で実行されます。ロールごとに、そのロールに直接割り当てられたカスタムポリシーのグループが形成され、さらにユーザーに直接割り当てられたカスタムポリシーのグループが形成されます。グループのポリシーの少なくとも 1 つでクエリが拒否された場合、そのグループではクエリは拒否されます。グループのすべてのポリシーでクエリが承認された場合、そのグループではクエリは承認されます。少なくとも 1 つのグループでクエリが承認された場合、クエリは承認されます。
たとえば、R1 と R2 の 2 つのロールを持つユーザーがいるとします。このユーザーには、ビュー V に対する 2 つのポリシー P1 と P2 が割り当てられています。また、このユーザーのロール R1 には、ビュー V に対する別の 2 つのポリシー P3 と P4 が割り当てられており、ロール R2 には、ビュー V に対する別の 2 つのポリシー P5 と P6 が割り当てられています。
このユーザーがビュー V に対してクエリを実行すると、Virtual DataPort はポリシー P1 を評価します。P1 でクエリが承認されると、P2 を評価します。P2 でもクエリが承認されると、サーバーは残りのポリシーは評価せずにクエリを実行します。
P1 でクエリが拒否された場合、サーバーはそのユーザーのポリシーをそれ以上評価せずに、ロール R1 のポリシー P3 と P4 の評価を開始します。P3 でクエリが承認されると、P4 を評価します。P4 でもクエリが承認されると、サーバーは残りのポリシーを評価せずにクエリを実行します。
P3 でクエリが拒否された場合、サーバーはロール R1 のポリシーをそれ以上評価せずに、ロール R2 のポリシー P5 と P6 の評価を開始します。P5 でクエリが承認されると、P6 を評価します。P6 でもクエリが承認されると、サーバーはクエリを実行します。
P5 でクエリが拒否された場合、サーバーはクエリを実行しません。