ディメンション データへのカスタム アクセス権の付与 (Analysis Services)

キューブへの読み取りアクセスを有効にした後は、ディメンション メンバー (キューブで使用されるすべてのメジャーが含まれているメジャー ディメンション内のメジャーを含む) へのアクセスを明示的に許可または拒否する権限を追加で設定できます。 たとえば、再販業者のカテゴリが複数ある場合は、特定の業種のデータを除外する権限を設定できます。 次の図は、Reseller ディメンション内の Warehouse 業種へのアクセスを拒否する前と後の効果を示しています。

ディメンション メンバーのあるピボットテーブルとディメンション メンバーのないピボットテーブル

既定では、Analysis Services キューブからデータを読み取れる場合は、そのキューブに関連付けられたすべてのメジャーおよびディメンション メンバーに対する読み取り権限が自動的に与えられます。 多くのシナリオではこの動作で十分ですが、セキュリティ要件によっては、同じディメンションに対するアクセス レベルをユーザーごとに変更するような、より細分化した承認方法が必要になる場合もあります。

アクセスを制限するには、アクセスを許可 (AllowedSet) または拒否 (DeniedSet) するメンバーを選びます。 そのためには、ロールに含めるディメンション メンバーを選択するか、ロールから除外するディメンション メンバーの選択を解除します。

ディメンションの基本的なセキュリティは非常に簡単で、ロールに含める、またはロールから除外するディメンション属性および属性階層を選ぶだけです。 高度なセキュリティはより複雑であり、MDX スクリプトの専門知識が必要になります。 両方の方法について次に説明します。

必要条件

カスタム アクセスのシナリオでは使用できないメジャーまたはディメンション メンバーもあります。 ロールが既定のメジャーまたはメンバーへのアクセスを制限したり、メジャー式に含まれるメジャーへのアクセスを制限したりする場合は、接続が失敗します。

ディメンション セキュリティに対する障害 (既定のメジャー、既定のメンバー、メジャー式に使用されるメジャー) を確認します。

  1. SQL Server Management Studio でキューブを右クリックし、[キューブをスクリプト化] をクリックします。 | [ALTER] | [新しいクエリ エディター ウィンドウ] を順に選択します。

  2. DefaultMeasure を探します。 キューブに対して 1 つおよびパースペクティブごとに 1 つ見つかるはずです。 ディメンション セキュリティを定義するときに、既定のメジャーへのアクセスを制限しないでください。

  3. 次に、MeasureExpression を探します。 メジャー式とは、計算に基づくメジャーであり、計算には通常他のメジャーが含まれます。 制限するメジャーが、式では使用されていないことを確認してください。 すぐにアクセスを制限する場合は、キューブ全体からそのメジャーへのすべての参照も必ず除外してください。

  4. 最後に、DefaultMember を探します。 属性の既定メンバーとして機能する属性をすべてメモしておきます。 ディメンション セキュリティを設定するときに、それらの属性に制限を設けないでください。

ディメンションの基本的なセキュリティ

  1. SQL Server Management Studio で、Analysis Services のインスタンスに接続し、オブジェクト エクスプローラーで適切なデータベースの [ロール] を展開し、データベース ロールをクリックするか、新しいデータベース ロールを作成します。

    キューブへの読み取りアクセス権がロールに既に与えられている必要があります。 この手順の詳細については、「キューブまたはモデル権限の付与 (Analysis Services)」をご覧ください。

  2. [ディメンション データ] | [基本] で、権限を設定するディメンションを選びます。

  3. 属性階層を選びます。 属性の一部は、利用できない場合があります。 AttributeHierarchyEnabled を持つ属性だけが [属性階層] 一覧に表示されます。

  4. アクセスを許可または拒否するメンバーを選びます。 [すべてのメンバーを選択する] オプションによるアクセスの許可が既定値です。 この既定値を保持し、このロールの [メンバーシップ] ペインで Windows ユーザーおよびグループ アカウントに対して表示しないメンバーを個別に消去することをお勧めします。 利点は、今後の処理操作で追加される新しいメンバーが、このロールで接続したユーザーに対して自動的に利用可能になることです。

    または、[すべてのメンバーの選択を解除する] を使ってアクセス全体を取り消してから、許可するメンバーを選ぶこともできます。 今後の処理操作では、ディメンション データのセキュリティを手動で編集してディメンション データへのアクセスを許可するまで、新しいメンバーは表示されません。

  5. 必要に応じて、[詳細設定] をクリックし、この属性階層の表示部分の合計を有効にします。 このオプションにより、ロールで利用できるメンバーに基づいて集計値が再計算されます。

    注意

    ディメンション メンバーを切り捨てる権限を適用すると、集計値の合計は自動的に再計算されません。 権限を適用する前に、属性階層の All メンバーが個数として 200 を返したとします。 一部のメンバーへのアクセスを拒否する権限を適用した後は、ユーザーに対して表示されるメンバー値が大幅に減りますが、それでも All は 200 を返します。 キューブのユーザーの混乱を避けるため、All メンバーを、属性階層のすべてのメンバーの集計値ではなく、ロール メンバーであるメンバーだけの集計値になるように構成できます。 この動作を実行するには、ディメンションのセキュリティを構成するときに、[詳細設定] タブで Visual Totals を有効にします。 有効にすると、集計値は事前計算された集計値から取得されず、クエリの実行時に計算されます。 これは、クエリのパフォーマンスに大きな影響を与えることがあるため、必要な場合にだけ使ってください。

メジャーの非表示

セル データへのカスタム アクセス権の付与 (Analysis Services)」では、メジャーのセル データだけではなく、メジャーの表示される部分をすべて完全に非表示にするには、ディメンション メンバーに対する権限が必要であることを説明しました。 このセクションでは、メジャーのオブジェクト メタデータへのアクセスを拒否する方法について説明します。

  1. [ディメンション データ] | [基本] で、[ディメンション] 一覧を下にスクロールしてキューブ ディメンションを表示し、[メジャー ディメンション] をクリックします。

  2. メジャーの一覧で、このロールで接続したユーザーに対して表示しないメジャーのチェック ボックスをオフにします。

注意

ロール セキュリティを破ることができるメジャーを識別する方法については、前提条件を確認してください。

ディメンションの高度なセキュリティ

MDX の専門知識がある場合は、別のアプローチとして、メンバーのアクセスを許可または拒否する条件を設定する MDX 式を記述できます。 [ロールの作成] | [ディメンション データ] | [詳細設定] をクリックして、スクリプトを入力します。

MDX ビルダーを使って MDX ステートメントを記述できます。 詳細については、「[MDX ビルダー] ダイアログ ボックス (Analysis Services - 多次元データ)」を参照してください。 [詳細設定] タブには次のオプションがあります。

  • 属性
    メンバーのセキュリティを管理する属性を選択します。

  • [許可されたメンバー セット]
    AllowedSet は、メンバーなし (既定)、すべてのメンバー、または一部のメンバーに解決できます。 属性へのアクセスを許可しているにもかかわらず、許可されたセットにメンバーを定義していない場合は、すべてのメンバーへのアクセスが許可されます。 属性へのアクセスを許可していて、属性メンバーの特定のセットを定義した場合は、明示的に許可されているメンバーのみが表示されます。

    AllowedSet を作成すると、属性が複数レベルの階層に参加したときに波及効果があります。 たとえば、あるロールによって Washington 州へのアクセスが許可されるとします (そのロールによって会社の Washington 州営業部に権限が付与されるシナリオを想定します)。 このロールで接続するユーザーには、先祖 (United States) または子孫 (Seattle と Redmond) を含むクエリによって、Washington 州を含むチェーン内のメンバーのみが表示されます。 他の州は明示的に許可されていないため、その効果は他の州が拒否されている場合と同じになります。

    注意

    空の属性メンバー セット ({}) を定義した場合、属性メンバーはデータベース ロールにまったく表示されません。 許可されたセットが存在しない場合は、空のセットが存在するものとして解釈されます。

  • [拒否されたメンバー セット]
    DeniedSet プロパティは、メンバーなし、すべてのメンバー (既定)、または一部の属性メンバーに解決できます。 拒否されたセットに特定の属性メンバーのセットのみが含まれている場合、データベース ロールに対しては、それらの特定のメンバー (属性が複数レベルの階層に含まれる場合は、子孫を含む) へのアクセスのみが拒否されます。 Washington 州営業部の例について考えてみます。 Washington が DeniedSet に含まれている場合、このロールで接続したユーザーには、Washington とその子孫属性以外のすべての州が表示されます。

    前のセクションで説明したように、拒否されたセットは固定されたコレクションです。 その後の処理で、アクセスを拒否する必要がある新しいメンバーが導入された場合は、このロールを編集して、それらのメンバーを一覧に追加する必要があります。

  • [既定のメンバー]
    属性がクエリに明示的に含まれていない場合は、DefaultMember プロパティによってクライアントに返されるデータセットが決定します。 属性が明示的に含まれていない場合、Analysis Services では属性に対して次の既定メンバーのいずれかを使用します。

    • データベース ロールで属性の既定メンバーを定義している場合、Analysis Services ではこの既定メンバーを使用します。

    • データベース ロールが属性の既定メンバーを定義していない場合、Analysis Services では属性自体に定義されている既定メンバーを使用します。 属性の既定メンバーは、特別に指定していない限り、All のメンバーになります (属性が非集計として定義されている場合を除く)。

    たとえば、データベース ロールで、Male を Gender 属性の既定のメンバーとして指定しているとします。 クエリに、Gender 属性が明示的に含まれており、この属性に別のメンバーが指定されているのでない限り、Analysis Services では男性顧客のみを含むデータセットを返します。既定メンバーの設定の詳細については、「既定メンバーの定義」を参照してください。

  • [表示部分の合計を表示する]
    VisualTotals プロパティは、表示される集計セル値がすべてのセル値に基づいて計算されるか、データベース ロールが表示可能なセル値のみに基づいて計算されるかを示します。

    既定では、VisualTotals プロパティは無効になっています (False に設定されています)。 この既定の設定では、Analysis Services は、計算に使用するセル値の選択に時間を費やすことなく、すべてのセル値の合計をすばやく計算できるので、最大限のパフォーマンスが実現します。

    ただし、VisualTotals プロパティを無効にすると、集計されたセル値を使用して、ユーザーのデータベース ロールにアクセス権のない属性メンバーの値をユーザーが推定しようとした場合に、セキュリティの問題が発生するおそれがあります。 たとえば、Analysis Services では 3 つの属性メンバーの値を使用して、集計セル値を計算します。 データベース ロールには、これらの 3 つの属性メンバーのうちの 2 つを表示するためのアクセス権が許可されています。 集計セル値を使用すると、このデータベース ロールのメンバーは、3 番目の属性メンバーの値を推定できるようになります。

    VisualTotals プロパティを True に設定することで、この危険を回避できます。 VisualTotals プロパティを有効にすると、データベース ロールでは、権限のあるディメンション メンバーの集計合計のみを表示できるようになります。

  • Check
    クリックすると、このページで定義された MDX 構文がテストされます。

関連項目

タスク

データ マイニング構造およびモデルにおける権限の付与 (Analysis Services)

データ ソース オブジェクトにおける権限の付与 (Analysis Services)

概念

キューブまたはモデル権限の付与 (Analysis Services)

セル データへのカスタム アクセス権の付与 (Analysis Services)