キューブへの読み取りアクセスを有効にした後、ディメンション メンバーへのアクセスを明示的に許可または拒否する追加のアクセス許可を設定できます (キューブで使用されるすべてのメジャーを含むメジャー ディメンションに含まれるメジャーを含む)。 たとえば、リセラーの複数のカテゴリを指定すると、特定のビジネスタイプのデータを除外するアクセス許可を設定できます。 次の図は、Reseller ディメンションの Warehouse ビジネスタイプへのアクセスを拒否する前後の効果です。
既定では、Analysis Services キューブからデータを読み取ることができる場合、そのキューブに関連付けられているすべてのメジャーとディメンション メンバーに対する読み取りアクセス許可が自動的に付与されます。 この動作は多くのシナリオで十分な場合もありますが、セキュリティ要件では、異なるユーザーに対して異なるレベルのアクセス権を持つ、よりセグメント化された承認戦略が同じディメンションで必要になる場合があります。
アクセスを制限するには、アクセスを許可するメンバー (AllowedSet) または拒否するメンバー (DeniedSet) を選択します。 これを行うには、ロールに含めるディメンション メンバーまたはロールから除外するディメンション メンバーを選択または選択解除します。
基本的なディメンションのセキュリティが最も簡単です。ロールに含める、または除外するディメンション属性と属性階層を選択するだけです。 高度なセキュリティはより複雑であり、MDX スクリプトに関する専門知識が必要です。 どちらの方法も以下で説明します。
[前提条件]
すべての測定値またはディメンション メンバーをカスタム アクセス シナリオで使用できるわけではありません。 ロールが既定のメジャーまたはメンバーへのアクセスを制限したり、メジャー式の一部であるメジャーへのアクセスを制限したりすると、接続は失敗します。
ディメンション セキュリティへの妨害を確認する: 既定のメジャー、既定のメンバー、メジャー式の中で使用されるメジャー
SQL Server Management Studio で、キューブを右クリックし、スクリプト キューブとして | ALTER To | 新しいクエリ エディター ウィンドウを選択します。
DefaultMeasure
を検索します。 キューブ用に 1 つ、パースペクティブごとに 1 つを見つける必要があります。 ディメンションのセキュリティを定義するときは、既定のメジャーへのアクセスを制限しないようにします。次に、
MeasureExpression
を検索します。 メジャー式は、計算に基づくメジャーであり、多くの場合、計算には他のメジャーが含まれます。 制限したい尺度が式で利用されていないことを確認します。 または、思い切ってアクセスを制限し、キューブ全体でその施策に関するすべての参照を除外することを確実にしてください。最後に、
DefaultMember
を検索します。 属性の既定のメンバーとして機能するすべての属性を書き留めます。 ディメンション セキュリティを設定するときは、これらの属性に制限を設けないでください。
基本的な次元のセキュリティ
SQL Server Management Studio で Analysis Services のインスタンスに接続し、オブジェクト エクスプローラーで適切なデータベースの ロール を展開し、データベース ロールをクリックします (または、新しいデータベース ロールを作成します)。
ロールには既にキューブへの読み取りアクセス権が付与されているべきです。 この手順に関するヘルプが必要な場合は、「 キューブまたはモデルのアクセス許可を付与する (Analysis Services)」 を参照してください。
Dimension Data | Basic で、権限を設定する対象のディメンションを選択します。
属性階層を選択します。 すべての属性が使用できるわけではありません。 AttributeHierarchyEnabled を持つ属性のみが属性階層の一覧に表示されます。
アクセスを許可または拒否するメンバーを選択します。 [ すべてのメンバーの選択 ] オプションを使用してアクセスを許可することが既定です。 そのままで既定値を維持し、このロールを通じて Windows ユーザーアカウントとグループアカウントに表示されるべきでない個々のメンバーをMembership ペインで解除することをお勧めします。 利点は、将来の処理操作で追加された新しいメンバーが、このロールを通じて接続するユーザーに自動的に利用可能になることです。
または、 すべてのメンバーの選択を解除 して全体のアクセスを取り消し、許可するメンバーを選択することもできます。 今後の処理操作では、ディメンション データ セキュリティを手動で編集してアクセスを許可するまで、新しいメンバーは表示されません。
必要に応じて、[ 詳細設定 ] をクリックして、この属性階層の
Visual Totals
を有効にします。 このオプションは、ロールで使用可能なメンバーに基づいて集計を再計算します。注
ディメンション メンバーをトリミングする権限を適用する場合、集計された合計は自動的に再計算されません。 属性階層の
All
メンバーが、アクセス許可が適用される前に 200 のカウントを返したとします。 一部のメンバーへのアクセスを拒否するアクセス許可を適用した後も、All
は 200 を返します。ただし、ユーザーに表示されるメンバー値ははるかに少なくなります。 キューブのコンシューマーの混乱を避けるために、All
メンバーを属性階層の全メンバーの合計ではなく、ロールメンバーが関与するメンバーのみの合計として構成できます。 この動作を呼び出すには、ディメンションセキュリティを構成するときに[詳細設定]タブでVisual Totals
を有効にすることができます。 有効にすると、集計は、事前に計算された集計から取得されるのではなく、クエリ時に計算されます。 これはクエリのパフォーマンスに顕著な影響を与える可能性があるため、必要な場合にのみ使用してください。
対策を隠す
セル データへのカスタム アクセスの許可 (Analysis Services) では、メジャーのすべての視覚的側面をセル データだけでなく完全に非表示にするには、ディメンション メンバーに対するアクセス許可が必要であることを説明しました。 このセクションでは、メジャーのオブジェクトメタデータへのアクセスを拒否する方法について説明します。
ディメンション データ | Basic で、キューブ ディメンションに到達するまでディメンション リストを下にスクロールし、[メジャー ディメンション] を選択します。
メジャーの一覧から、このロールを介して接続しているユーザーには表示されないメジャーのチェック ボックスをオフにします。
注
前提条件を確認して、ロールのセキュリティを損なう可能性のある対策を特定する方法を学びます。
高度な次元セキュリティ
MDX の専門知識がある場合は、メンバーがアクセスを許可または拒否される条件を設定する MDX 式を記述する方法もあります。 スクリプトを指定するには、ロールの作成 | Dimension Data | Advanced をクリックします。
MDX ビルダーで MDX ステートメントを記述できます。 詳細については、 MDX Builder (Analysis Services - 多次元データ) を参照してください。 [ 詳細設定 ] タブには、次のオプションがあります。
属性
メンバーのセキュリティを管理する属性を選択します。
許可されるメンバー セット
AllowedSet は、メンバーなし (既定)、すべてのメンバー、または一部のメンバーに解決できます。 属性へのアクセスを許可し、許可されたセットのメンバーを定義しない場合は、すべてのメンバーへのアクセスが許可されます。 属性へのアクセスを許可し、属性メンバーの特定のセットを定義すると、明示的に許可されたメンバーのみが表示されます。
AllowedSet を作成すると、属性が複数レベルの階層に参加すると、波及効果が生まれます。 たとえば、あるロールがワシントン州へのアクセスを許可しているとします (役割が会社のワシントン州営業部門にアクセス許可を付与しているシナリオを想定します)。 このロールを介して接続するユーザーの場合、先祖 (米国) または子孫 (シアトルとレドモンド) を含むクエリには、ワシントン州を含むチェーン内のメンバーのみが表示されます。 他の状態は明示的に許可されていないため、効果は拒否された場合と同じになります。
注
属性メンバーの空のセット ({}) を定義した場合、属性のメンバーはデータベース ロールに表示されません。 許可されたセットが存在しない場合は、空のセットとして解釈されません。
拒否されたメンバーセット
DeniedSet プロパティは、メンバーが存在しない場合、すべてのメンバー (デフォルト)、または一部の特定の属性メンバーに解決されることがあります。 拒否されたセットに特定の属性メンバーのセットのみが含まれている場合、データベース ロールは、それらの特定のメンバーだけでなく、属性が複数レベルの階層にある場合は子孫にのみアクセスを拒否されます。 ワシントン州の営業部門の例を考えてみましょう。 ワシントンが DeniedSet に配置されている場合、このロールを介して接続しているユーザーには、ワシントンとその子孫属性を除く他のすべての州が表示されます。
前のセクションで、拒否されたセットが固定コレクションであることを思い出してください。 その後、アクセスを拒否する必要がある新しいメンバーが処理によって導入される場合は、このロールを編集してそれらのメンバーをリストに追加する必要があります。
既定のメンバー
DefaultMember プロパティは、属性がクエリに明示的に含まれていない場合にクライアントに返されるデータ セットを決定します。 属性が明示的に含まれていない場合、Analysis Services では、属性に次のいずれかの既定のメンバーが使用されます。
データベース ロールで属性の既定のメンバーが定義されている場合、Analysis Services はこの既定のメンバーを使用します。
データベース ロールで属性の既定のメンバーが定義されていない場合、Analysis Services は属性自体に対して定義されている既定のメンバーを使用します。 特に指定しない限り、属性の既定のメンバーは
All
メンバーです (属性が集計不可として定義されている場合を除く)。
たとえば、データベース ロールが Gender
属性の既定のメンバーとしてMale
を指定するとします。 クエリに明示的に Gender
属性が含まれていて、この属性に別のメンバーが指定されていない限り、Analysis Services は男性のお客様のみを含むデータ セットを返します。 既定のメンバーの設定の詳細については、「既定のメンバー を定義する」を参照してください。
Visual Total を有効にする
VisualTotals プロパティは、表示される集計セルの値が、すべてのセル値に従って計算されるか、データベース ロールに表示されるセル値のみに基づいて計算されるかを示します。
既定では、VisualTotals プロパティは無効になっています ( False
に設定されています)。 Analysis Services では、計算するセル値の選択に時間を費やす代わりに、すべてのセル値の合計をすばやく計算できるため、この既定の設定ではパフォーマンスが最大化されます。
ただし、VisualTotals プロパティを無効にすると、ユーザーが集計されたセル値を使用して、ユーザーのデータベース ロールがアクセスできない属性メンバーの値を推測できる場合、セキュリティの問題が発生する可能性があります。 たとえば、Analysis Services では、3 つの属性メンバーの値を使用して、集計されたセル値を計算します。 データベース ロールには、これら 3 つの属性メンバーのうち 2 つを表示するアクセス権があります。 集計されたセル値を使用すると、このデータベース ロールのメンバーは、3 番目の属性メンバーの値を推測できます。
VisualTotals プロパティを True
に設定すると、このリスクを排除できます。 VisualTotals プロパティを有効にすると、データベース ロールは、そのロールにアクセス許可があるディメンション メンバーの集計合計のみを表示できます。
確認事項
このページで定義されている MDX 構文をテストする場合にクリックします。
こちらもご覧ください
キューブまたはモデルの権限を付与する (Analysis Services)
セル データへのカスタム アクセスを許可する (Analysis Services)
データ マイニング構造とモデルに対するアクセス許可を付与する (Analysis Services)
データ ソース オブジェクトに対するアクセス許可を付与する (Analysis Services)