行レベルのセキュリティ

Oracle Analytics Serverにより、データ・セキュリティを構成できます。

一部のデータ・ソースでは、データ・セキュリティ・ポリシーを適用して、個々のユーザーが問合せできるデータを判別します。データ・セキュリティは、行レベル・セキュリティ、データ・レベル・セキュリティ、仮想プライベート・データベース(VPD)ポリシーなどの様々な用語を使用して記述されます。このドキュメントでは、行レベル・セキュリティという用語を使用します。

一部のデータ・ソースでは、問合せを実行しているエンド・ユーザーを偽装できる特権ユーザーを使用した接続をサポートしています。Oracle Analytics Serverの接続プールを使用すると、接続文字列情報、およびデータ問合せの前に実行される接続時スクリプトと問合せ時スクリプトをパラメータ化できます。Oracle Analytics Serverで、実際のエンド・ユーザーを偽装できる特権ユーザーを使用してデータ・ソースに接続する際には、データ・ソースのデータ・セキュリティ・ポリシーがエンド・ユーザー問合せに適用されます。

接続文字列および問合せスクリプトの構成に加え、Oracle Business Intelligence接続プールには仮想プライベート・データベース(VPD)オプションが含まれます。仮想プライベート・データベース(VPD)を使用すると、Oracle Analytics Serverの問合せキャッシュがユーザー間で共有されないようにできます。これは、各ユーザーが問合せに許可されているデータのみを取得する必要があるためです。

この図は、データベース内で問合せに対して行レベル・セキュリティがどのように施行されているかを示しています。セキュリティ・ルールは接続するすべてのクライアントに適用され、たとえ論理SQL問合せが変更される場合であっても違反は許可されません。この例では、Oracle BIサーバーによって生成されるSQL問合せが同じであったとしても、問合せを生成したユーザーに応じて返される結果は異なります。返される結果は、データベース内に作成、施行されているルールに基づきます。

データベースのユーザー、権限およびセキュリティ・ポリシーを定義する必要があります。詳細は、データベースのドキュメントを参照してください。

行レベルのセキュリティを設定する場合は、次の構成情報について検討してください。

  • 行レベルのセキュリティは、SSOを使用しているときや、偽装(デリバーなど)が関与するケースでは機能しません。これは、エンド・ユーザーのパスワードがOracle BIサーバーでは使用できないためです。

  • 接続スクリプトを使用して、Oracle Databaseデータ・ソースに対して同じ機能を実行できます。

  • EssbaseまたはHyperion Financial Managementデータ・ソースの場合、接続プールでは、SSOを実装するための追加オプションが表示されます。

行レベル・セキュリティの設定

リポジトリ内またはデータベース内に行レベル・セキュリティを設定するように選択できます。

リポジトリ内に行レベル・セキュリティを実装することには多くの利点があります。それらを次に示します。

  • すべてのユーザーがデータベース接続プールを共有することによって、パフォーマンスが向上します。

  • すべてのユーザーがキャッシュを共有することによって、パフォーマンスが向上します。

  • 多くのフェデレーテッド・データ・ソースに適用されるセキュリティ・ルールを定義し、維持することができます。

一方、データベース内に行レベル・セキュリティを実装することは、複数のアプリケーションでデータベースを共有するような状況において有用です。データベース内に行レベル・セキュリティを実装する場合は、リポジトリ内にオブジェクト権限を定義し適用する必要もあります。

リポジトリとデータベースの両方に行レベル・セキュリティを設定することが可能ですが、特別な必要性がないかぎり、両方の場所で行レベル・セキュリティを施行することは通常はありません。

このセクションには次のトピックが含まれます:

データ・フィルタ

Oracle BI管理ツールを使用して、特定のアプリケーション・ロールのリポジトリ・オブジェクトに対するデータ・フィルタを定義できます。

データベース内に行レベル・セキュリティを実装する場合、通常、データ・フィルタは設定しません。なぜなら、この場合、行レベル・セキュリティのポリシーはOracle BIサーバーではなく、データベースによって施行されるためです。

データ・フィルタは、ビジネス・モデルとマッピング・レイヤーおよびプレゼンテーション・レイヤーのオブジェクトに対して設定できます。論理オブジェクトにフィルタを適用すると、プレゼンテーション・レイヤーのそのオブジェクトを使用するすべてのオブジェクトに影響が及びます。プレゼンテーション・レイヤーのオブジェクトにフィルタを設定すると、基礎となる論理オブジェクトに設定されているその他すべてのフィルタとともに、そのフィルタがオブジェクトに適用されます。

この図は、Oracle BIサーバー内でデータ・フィルタ・ルールが施行される方法を示しています。セキュリティ・ルールは接続するすべてのクライアントに適用され、たとえ論理SQL問合せが変更される場合であっても違反は許可されません。

この例では、アプリケーション・ロールにフィルタが適用されています。Anne Green(そのロールのメンバー)がリクエストを送信するとき、返される結果はこのフィルタに基づいて制限されます。管理者ユーザーのアプリケーション・ロールにはフィルタは適用されないため、すべての結果が返されます。Oracle BIサーバーによって生成されるSQLでは、定義済のすべてのデータ・フィルタが考慮されます。

リポジトリでのデータ・フィルタの設定

次のステップを使用してデータ・フィルタを割り当て、リポジトリ内で行レベルのセキュリティ・ルールを施行します。

データ・フィルタは、個々のユーザーに対してではなく、必ず特定のアプリケーション・ロールに対して設定してください。

フィルタを作成するには、まずフィルタを適用するサブジェクト領域からオブジェクトを選択します。次に、個々のオブジェクトに対してフィルタ式情報を設定します。たとえば、表内の他の列の値の範囲に基づいて結果を制限するための、「"Sample Sales"."D2 Market"."M00 Mkt Key" > 5」のようなフィルタを定義できます。

オフライン・モードでアプリケーション・ロールがIdentity Managerに表示されない場合は、オフライン・モードでのデータ・アクセス・セキュリティの適用についてを参照してください。

フィルタ定義の中ではリポジトリ変数およびセッション変数を使用することもできます。それらの変数を含める場合は、正しい構文になるように式ビルダーを使用してください。

論理ファクト表などのリポジトリ・オブジェクトに対して複数のアプリケーション・ロールから異なるレベルのアクセスがある場合、機能グループを作成して、特定のアプリケーション・ロールで表示が制限されているデータがそのアプリケーション・ロールに表示されないようにします。たとえば、地域の店員に対してその割当て地域の四半期の売上を表示しても、すべての地域における全セグメントの売上を表示しないようにして、機密情報がさらされないようにする場合、フィルタ処理する特定のアプリケーション・ロールに適した、異なるアクセス・レベルの機能グループを作成します。アプリケーション・ロールの機能グループの指定を参照してください。

  1. Oracle BI管理ツールで、リポジトリを開きます。
  2. 管理」→「アイデンティティ」を選択します。
  3. 「Identity Manager」ダイアログで、アプリケーション・ロールをダブルクリックします。
  4. 「アプリケーション・ロール」ダイアログで「権限」をクリックします。
  5. アプリケーション・ロール権限ダイアログで、「データ・フィルタ」タブをクリックします。
  6. 「サブジェクト領域」リストから、フィルタで使用するリポジトリ・オブジェクトを選択します。
  7. 以下のいずれか1つを実行します。
    • 「追加」ボタンをクリックして、使用するオブジェクトを参照して特定し、「選択」をクリックします。
    • 空の行で「名前」フィールドをダブルクリックしてから、オブジェクトを参照して特定し、そのオブジェクトをダブルクリックして選択します。
  8. 定義するデータ・フィルタを選択し、「式ビルダー」アイコンをクリックします。
  9. 式ビルダーで、リポジトリ・オブジェクトと演算子を使用して条件を定義します。
  10. (オプション)「ステータス」リストから。
  11. OK」をクリックし、再度「OK」をクリックして、Identity Managerに戻ります。

アプリケーション・ロールの機能グループの指定

次のステップでは、同じリポジトリ・オブジェクト(通常は論理ファクト表)に対する異なるデータ・アクセス・フィルタを使用してアプリケーション・ロールの機能グループを指定します。

定義された機能グループがない場合、関連付けられたロールにかかわらず、特定の表に適用されたすべてのセキュリティ・フィルタがOR演算子を使用して結合されます。ユーザーはセキュリティ・フィルタによって選択されたすべての行の結合を表示できるため、OR演算子の使用は多くの場合機能します。たとえば、次のようなフィルタがあるとします。

ロールAにフィルタProduct = 'Coke'が割り当てられます

ロールBにフィルタProduct = 'Pepsi'が割り当てられます

ユーザーにロールAとロールBが付与されている場合、そのユーザーはCokeとPepsiの両方の製品のデータを表示できます。

同じ表の2つのセキュリティ・フィルタが問合せで結合される場合、フィルタ条件はOR演算子を使用して結合されます(このことは、ディメンション表で定義されたほとんどのセキュリティ・フィルタに該当します)。次に例を示します。

Product = 'Coke' OR Product = 'Pepsi'

異なるディメンションのデータ・フィルタを使用して1つのファクト表を保護する場合は、機能グループを使用する必要があります。

この例では、ファクト表は次のフィルタを使用して保護されます。

ロールAにフィルタProduct = 'Coke'が割り当てられます

ロールBにフィルタProduct = 'Pepsi'が割り当てられます

ロールCにフィルタRegion = 'Southwest'が割り当てられます

機能グループを使用しない場合、ロールA、BおよびCのユーザーの問合せでは、3つのフィルタ条件がすべてOR演算子を使用して結合されます。次に例を示します。

(Product = 'Coke' OR Product = 'Pepsi' OR Region = 'Southwest')

ProductとRegionは独立したディメンションであるため、ロールA、BおよびCの結果を結合しても意味をなしません。OR演算子を使用して異なるディメンションのデータ・フィルタを結合すると、ユーザーに表示する必要がないデータ値にユーザーがアクセスできるようになります。

この例では、ユーザーはPepsiおよびCoke製品内のすべての地域のデータに加えて、Southwest地域内のすべての製品のデータを表示できます。

想定された動作を得るには(つまり、Southwest地域内のPepsiおよびCoke製品のデータのみをユーザーが表示できるようにするには)、AND演算子を使用して製品フィルタと地域フィルタを結合して、フィルタを変更する必要があります。次に例を示します。

(Product = 'Coke' OR Product = 'Pepsi') AND (Region = 'Southwest')

機能グループを使用してこれを行うには、次のようにセキュリティ・フィルタを機能グループに割り当てる必要があります。

ロールAにフィルタProduct = 'Coke' with functional group "Product"が割り当てられます

ロールBにフィルタProduct = 'Pepsi' with functional group "Product"が割り当てられます

ロールCにフィルタRegion = 'Southwest' with functional group "Region"が割り当てられます

同じ機能グループ内のすべてのフィルタはOR演算子を使用して結合され、異なる機能グループ内のすべてのフィルタのセットはAND演算子を使用して結合されます。各セキュリティ・フィルタに関連付けられた機能グループを選択することで、OR演算子とAND演算子を使用してフィルタを結合する方法を制御できます。

データ・フィルタを作成するには、リポジトリでのデータ・フィルタの設定を参照してください。

  1. Oracle BI管理ツールで、「管理」から「アイデンティティ」を選択します。
  2. Identity Managerで、アプリケーション・ロールをダブルクリックします。
  3. 「アプリケーション・ロール」で、「権限」をクリックします。
  4. アプリケーション・ロール権限で、「データ・フィルタ」タブをクリックします。
  5. 「データ・フィルタ」タブで、機能グループに割り当てるフィルタを選択します。
  6. 機能グループ列で、既存のグループを選択するか、使用する新しいグループの名前を入力します。
  7. 「OK」をクリックします。

データベースでの行レベル・セキュリティの設定

複数のアプリケーションで同じデータベースが共有されている場合は、データベース内に行レベル・セキュリティを実装することをお薦めします。

仮想プライベート・データベース(VPD)機能を使用するようにデータベースを構成している場合は、RPD問合せを介してデータベース問合せを実行する際に(共通エンタープライズ情報モデル)、この手順を適用できます。

  1. 管理ツールでリポジトリを開きます。
  2. データベース・レベルのセキュリティを設定するデータベースに関連付けられている接続プールをダブルクリックします。
  3. 「接続プール」ダイアログの「一般」タブで、「共有ログオン」を選択し、ユーザー資格証明を入力します。

    共有ログオンで指定されたユーザー詳細が、データベースへの接続に使用されます。

    データベース・セッション・コンテキストを使用して、データベースにエンド・ユーザーの識別情報を渡すことができます。セッション・コンテキストを設定するには接続プール・スクリプトを使用します。

  4. 「接続プール」ダイアログで「OK」をクリックします。
  5. データベース・レベルのセキュリティの設定対象となるデータベース・オブジェクトをダブルクリックします。
  6. 「データベース」ダイアログで「仮想プライベート・データベース」を選択します。このオプションを選択することにより、各ユーザーのキャッシュ・エントリがOracle BIサーバーによって保護されるようになります。Oracle BIサーバーは、セキュリティ・センシティブ変数のリストと見込みのキャッシュ・ヒットをマッチングします。キャッシュ・ヒットは、すべてのセキュリティ・センシティブ変数が含まれて一致しているキャッシュ・エントリでのみ発生します。
  7. 「データベース」ダイアログで「OK」をクリックします。

データベース内のデータに行レベル・セキュリティを設定した後、リポジトリ内にプレゼンテーション・レイヤーまたは他のオブジェクト用のオブジェクト権限を設定できます。また、問合せ制限(ガバナー)を設定することもできます。オブジェクト権限の設定および問合せ制限の設定を参照してください。