SQL Server 2008 徹底検証シリーズdownload.microsoft.com/download/F/1/0/F10BC023-9396-4D67...5...

65
SQL Server 2008 徹底検証シリーズ 大規模データ ウェアハウス実践ガイド(環境構築 - 詳細編) アクセス制御の実装手順 Published2008 11 20

Transcript of SQL Server 2008 徹底検証シリーズdownload.microsoft.com/download/F/1/0/F10BC023-9396-4D67...5...

SQL Server 2008 徹底検証シリーズ

大規模データ ウェアハウス実践ガイド(環境構築 - 詳細編)

アクセス制御の実装手順

Published.2008 年 11 月 20 日

2

© 2008 Microsoft Corporation. All rights reserved.

本書に記載した情報は、本書各項目に関する発行日現在の Microsoft の見解を表明するものです。Microsoft は絶えず変化する市

場へ対応しなければならないため、ここに記載した情報に対していかなる責務を負うものではなく、提示された情報の信憑性につい

ては保証できません。

本評価ガイドは情報提供のみを目的としています。Microsoft は、明示的または暗示的を問わず、本書にいかなる保証も与えるもの

ではありません。

すべての当該著作権法を遵守することはユーザーの責務です。Microsoft 書面による明確な許可なく、本書の如何なる部分について

も、転載や検索システムへの格納または挿入を行うことは、どのような形式または手段(電子的、機械的、複写、レコーディング、

その他)および目的であっても禁じられています。これらは著作権保護された権利を制限するものではありません。

Microsoft は、本書の内容を保護する特許、特許出願書、商標、著作権、またはその他の知的財産権を保有する場合があります。

Microsoft から書面によるライセンス契約が明確に供給される場合を除いて、本書の提供はこれらの特許、商標、著作権、またはそ

の他の知的財産へのライセンスを与えるものではありません。

Microsoft、Windows、MSDN、Visual Studio、SQL Server は、米国および(または)その他の国において、Microsoft Corporation

の登録商標または商標です。

その他記載されている実際の社名および製品名は、各社の商標です。

Microsoft Corporation ・ One Microsoft Way ・ Redmond、 WA 98052-6399 ・ US

3

アクセス制御の実装手順

この資料では、CQI-DWH(データ ウェアハウス)シナリオにおける、アクセス制御の実装手順を詳し

く説明します。リンクレポートによるアクセス制御、Reporting Services から RDBMS へ接続する際

のアクセス制御として「ストアド プロシージャ」の実装方法、Reporting Services から Analysis

Services へアクセスする際の「ロール」の実装方法などを詳しく説明します。

説明内容は、以下のとおりです。

目次

1.アクセス制御の実装概要 ................................................................................................... 4

1.1 今回のアクセス制御要件 4

1.2 Active Directory の有無について 5

1.3 「AD あり」の場合のアクセス制御の実装概要 6

1.4 「AD なし」の場合のアクセス制御の実装概要 14

1.5 レポート マネージャについて 25

1.6 レポート マネージャからの操作 26

1.7 リンクレポートの操作 29

2.アクセス制御の実装手順 ................................................................................................. 32

2.1 アクセス制御の実装手順 32

2.2 リンクレポートのパラメータの設定 32

2.3 ホームとアイテムに対するアクセス制御(ロールの割り当て) 36

2.4 ロールの種類 36

2.5 アイテムに対するアクセス制御の初期設定 37

2.6 ホームに対するセキュリティ設定 40

2.7 フォルダに対するセキュリティ設定 42

2.8 リンクレポート(レポート)に対するセキュリティ設定 44

2.9 レポートの直 URL だけを公開する場合のセキュリティ設定 46

2.10 アクセス制御設定(URL 指定) 47

3.RDBMS へ接続する際のアクセス制御の実装方法 ........................................................ 48

3.1 RDBMS へ接続する際のストアド プロシージャによるアクセス 48

3.2 Reporting Services へ実装する場合の考慮事項 49

3.3 Reporting Services でのユーザー名の取得方法 50

3.4 ストアド プロシージャの処理の概要 52

4.Analysis Services アクセス制御の実装方法 .................................................................. 58

4.1 ロールによるアクセス制御 58

4.2 Analysis Services アクセス制御の設定方法 59

4

1.アクセス制御の実装概要

第 1 章では、アクセス制御の実装手順の概要を説明します(具体的な実装手順は、第 2 章以降で説明し

ます)。

1.1 今回のアクセス制御要件

今回の検証では、下記のアクセス制御要件を満たす実装方法を確認しました。

すべてのデータへアクセス可能な「コンテンツ マネージャ」と各担当領域のデータのみ

アクセス可能な「End User」がいる

ユーザーからのアクセス パターン

今回の検証では、ユーザーからのアクセスは、次の 3 つのパターンとしています

Web ブラウザから Reporting Services 経由で RDBMS へアクセス

Web ブラウザから Reporting Services 経由で Analysis Services へアクセス

Excel ピボット テーブルから Analysis Services へアクセス

RDBMS に対するユーザーのアクセスは、すべて Reporting Services を経由するように制限

し、Reporting Services から RDBMS へのアクセスは専用の「固定ユーザー」を使用します。

固定ユーザーの Windows アカウントにマップされたログインのみを作成することで、他のユ

ーザーからのアクセスを制御することができます。

Reporting Services から Analysis Services へのアクセスにも、専用の「固定ユーザー」を使

用します。

役割 アクセス可否

コンテンツマネージャ 全てのデータにアクセス可能

End User

地域担当 各担当地域のデータのみアクセス可能

支店担当

各担当支店のデータのみアクセス可能・個人情報にはアクセス不可・MCustomer は、「氏名」 のみ参照可・1地域には、複数の支店が含まれている

SSRS

SSAS

RDBMS

Excel

Web ブラウザ

* SSRS : Reporting ServicesSSAS : Analysis Services

5

1.2 Active Directory の有無について

Active Directory(以下、AD)を認証基盤として利用する場合は、以下の 3 つの利用パターン

が考えられます。

本資料では、ユーザーとサーバー群が同一 Active Directory ドメインに所属している場合を

「AD あり」、全く AD がない場合を「AD なし」とし、この 2 つのケースでの検証を実施し

て、アクセス制御の実装方法を確認しました。

以降では、AD あり/なしの場合のアクセス制御の実装方法の概要を説明します。

AD なし

Active Directory (AD) が入っている場合

SSRS

SSAS

RDBMS

AD

SSRS

SSAS

RDBMS

AD

SSRS

SSAS

RDBMS

(3) 全くAD がない場合

本資料では、この場合(赤枠図)を 「AD なし」と呼ぶ

(2) サーバー群は、同一AD に入っているが、ユーザーは、サーバー群のAD に入っていない場合

(1) ユーザーや各サーバー群が、すべて同一ドメインに所属している場合

本資料では、この場合(緑枠図)を 「AD あり」と呼ぶ

6

1.3 「AD あり」の場合のアクセス制御の実装概要

今回の環境で用意したユーザー

「AD あり」の環境で、用意したユーザーは、以下のとおりです。

ユーザーとグループ

グループは、以下の構成にしています。

ユーザー リスト

各ユーザーは、以下のグループへ所属させています。

役割 アクセス可否 ユーザー名

コンテンツマネージャ すべてのデータにアクセス可能 sql¥Master_User1

End User

各担当地域のデータのみアクセス可能

地域名称 地域担当

神奈川 sql¥B_User1

千葉 sql¥D_User1

各担当支店のデータのみアクセス可能(個人情報にはアクセス不可)

地域名称 支店名称 支店担当

神奈川横浜本部 sql¥B01_User1

川崎支社 sql¥B02_User1

千葉千葉中央支社 sql¥D01_User1

千葉エリア支社 sql¥D02_User1

ドメイン名: SQL

ASサーバーのローカルグループ

ドメイングループ

ドメインユーザー

ローカルグループ メンバー ドメイングループ 備考

Master_Group DWH-R90003¥Master_User1 sql¥Master_Group コンテンツマネージャ

B_Group DWH-R90003¥B_User1 sql¥B_Group 地域担当

神奈川

D_Group DWH-R90003¥D_User1 sql¥D_Group 千葉

B01_Group DWH-R90003¥B01_User1 sql¥B01_Group

支店担当

横浜本部

B02_Group DWH-R90003¥B02_User1 sql¥B02_Group 川崎支社

D01_Group DWH-R90003¥D01_User1 sql¥D01_Group 千葉中央支社

D02_Group DWH-R90003¥D02_User1 sql¥D02_Group 千葉エリア支社

* DWH-R90003: Analysis Services サーバー名、SQL: ドメイン名

Analysis Services サーバー上のローカルグループのメンバー

7

ユーザー認証テーブル

今回の検証では、以下のユーザー認証テーブルを作成しています(ストアド プロシージャを

使用したアクセス制御で使用します)。

各 UserName に対して、空白の部分はすべてアクセス可能 です。たとえば、

sql¥Master_User1 はすべてのデータへアクセス可能、sql¥B_User1 は「地域名称」が「神

奈川」であるすべての支店へアクセス可能です。

ストアド プロシージャの具体的な実装方法については、3 章で説明します。

固定ユーザーについて

固定ユーザーは、Reporting Services(SSRS)からデータソースへの接続ユーザーのことを指

します。

Reporting Services から RDBMS への接続には、Sql¥DBDataReader を使用

Reporting Services から Analysis Services への接続には、Sql¥ASDataReader を使用

グローバル グループ メンバー 備考

Master_Group sql¥Master_User1 コンテンツ マネージャ

B_Group sql¥B_User1 地域担当

神奈川

D_Group sql¥D_User1 千葉

B01_Group sql¥B01_User1

支店担当

横浜本部

B02_Group sql¥B02_User1 川崎支社

D01_Group sql¥D01_User1 千葉中央支社

D02_Group sql¥D02_User1 千葉エリア支社

AD のグローバルグループのメンバー

地域コード 支店コード 地域名称 支店名称 UserName

B 神奈川 sql¥B_User1

D 千葉 sql¥D_User1

sql¥Master_User1

B B01 神奈川 横浜本部 sql¥B01_User1

B B02 神奈川 川崎支社 sql¥B02_User1

D D01 千葉 千葉中央支社 sql¥D01_User1

D D02 千葉 千葉エリア支社 sql¥D02_User1

SSRS

SSAS

RDBMS

Sql¥DBDataReader

Sql¥ASDataReader

8

Reporting Services から RDBMS への接続ユーザーの設定方法

Reporting Services から RDBMS への接続ユーザー「SQL¥DBDataReader」に対しては、

次のように設定します。

ログイン アカウントとして、SQL¥DBDataReader を登録

サーバー ロールは、Public へ設定

データベース ユーザー マッピングは、MSCQIDWH データベースに対して設定

既定のスキーマは、dbo

SQL¥DBDataReader のログインを作成

サーバーロールはPublicに設定

MSCQIDWHのデータロールメンバーシップを

Db_datareaderに設定

9

Reporting Services から Analysis Services への接続ユーザーの設定方法

Reporting Services から Analysis Services への接続ユーザー「SQL¥ASDataReader」に対

しては、次のように設定します。

1. すべてのデータを読み取れる「ロール」を作成

2. ロールのメンバシップにユーザー「Sql¥ASDataReader」を追加する

3. ディメンション データの設定で、上記ユーザーがすべてのディメンション データを読み

取れるように設定する(ロール作成後の既定の設定は、すべてのディメンション データ

を読み取れる設定になっているため)。

ロールの設定方法については、4 章で詳しく説明します。

10

Reporting Services から RDBMS へのアクセス制御の実装方法

Reporting Services から RDBMS へのアクセス制御は、以下のように実装します。

Reporting Services の認証方式には「Windows 認証」を使用

Reporting Services から RDBMS への接続ユーザーには「固定ユーザー」を使用。前述

の「SQL¥DBDataReader」

RDBMS のアクセス制御

ログイン ユーザーを元にして、事前に用意したユーザー アクセス権管理テーブルを使

用し、ストアド プロシージャ内でデータを絞り、レポートで表示するデータセットを作

成する

レポート内で「ログイン ユーザー名」を取得し、ストアド プロシージャ内でログイン ユ

ーザー名を引数にして、ユーザー アクセス権管理テーブル内のテーブルを検索し、権限

設定を取得、ユーザーごとに行レベルのアクセス制御を行う

具体的な実装方法は、2 章以降で詳しく説明します。

Reporting Services から Analysis Services へのアクセス制御の実装方法

Reporting Services から Analysis Services へのアクセス制御は、以下のように実装します。

Reporting Services の認証方式には「Windows 認証」を使用

Reporting ServicesからAnalysis Servicesへの接続ユーザーには「固定ユーザーを使用」。

前述の「SQL¥ASDataReader」

Analysis Services のアクセス制御には「リンクレポート」を使用

具体的な実装方法は、2 章以降で説明します。

リンクレポートとは

ユーザーは、リンクレポートへアクセスすると、リンクレポートに埋め込まれたパラメータで

レポートを実行することができます。

SSRS

RDBMS

固定ユーザー

ユーザーアクセス権管理テーブル

SSRS

SSAS固定ユーザー

リンク レポートを使用

11

リンクレポートを利用したアクセス制御の実装方法

リンクレポートを利用してアクセス制御を実装するには、レポートを、以下のような構造で配

置します。

A 支店のユーザーは、Folder_1 のリンクレポートにのみアクセス可能に設定

B 支店のユーザーは、Folder_2 のリンクレポートにのみアクセス可能に設定

ユーザーは、必ず「Parameter 支店=自分の支店」でレポートを実行することになり、他店舗

のデータを参照できなくなります。

ユーザー

A支店

売上

レポート

リンクレポート

Parameter支店= A支店

売上

レポート

レポート

[既定値]

Parameter支店= NULL

B支店

売上

レポート

リンクレポート

Parameter支店= B支店

B支店で

レポートを実行

A支店で

レポートを実行

ホーム Folder_1

Folder_2

A_Branch

B_Branch

フォルダ

リンクレポート

Parameter支店= A支店

Parameter支店= B支店

A 支店のユーザー

B 支店のユーザー

12

Excel から Analysis Services へのアクセス制御の実装方法

Excel から Analysis Services へのアクセス制御は、以下のように実装します。

Active Directory(AD)ユーザー アカウント/グループに対するロールの設定は、ロー

カル グループまたはドメイン グループに対して設定を行うことができます。

Excel からレポート アクションを使用する場合

レポート アクションでは、参照している階層をパラメータとしてレポートに渡すだけなので、

前述の「Reporting Services から RDBMS へのアクセス制御」で記載した実装を行っていれ

ばアクセス制御が可能です。

レポート アクションの利用例

35

13

個人情報保護のためのアクセス制御の実装方法

レポートで表示するデータセットを作成するストアド プロシージャ内で下記のような処理を

実装します。

個人情報が見られるユーザー

→ 個人情報の入ったカラム情報をそのまま出す

個人情報が見られないユーザー

→ 個人情報の入ったカラム情報をすべてアスタリスクで返す SQL 文を実装

まとめ: 「AD あり」の場合のアクセス制御の実装方法

RDBMS へのアクセス制御は「ストアド プロシージャ」を使用

ストアド プロシージャ内で行レベル セキュリティと個人情報の制御を実装

Analysis Services へのアクセス制御は「リンクレポート」を使用

RS 認証 RS → RDBMS

のユーザーRS→SSAS

のユーザーRS→SSASのアクセス制御

RS → RDBMS

のアクセス制御Excel → AS

のアクセス制御

Windows認証 固定ユーザー 固定ユーザー リンクレポート使用 ログインユーザーを元にストアドプロシージャを呼んでその中で絞る

アカウントに対するロールの設定

SSRS

SSAS

RDBMS

ユーザーアクセス権管理テーブル

14

1.4 「AD なし」の場合のアクセス制御の実装概要

今回の検証では、「AD なし」の環境(Active Directory がないワークグループ環境)につい

ても動作検証を実施しています。この場合の実装方法は、以下のとおりです。

使用したユーザー(Analysis Services サーバー)

「AD なし」の環境で使用したユーザー(Analysis Services サーバー上)は、以下のとおり

です。

ユーザーとグループ(Analysis Services サーバー)

グループは、以下の構成にしています。

ユーザー リスト(Analysis Services サーバー)

各ユーザーは、以下のグループへ所属させます。

役割 アクセス可否 ユーザー名

コンテンツマネージャ すべてのデータにアクセス可能 DWH-R90003¥Master_User1

End User

各担当地域のデータのみアクセス可能

地域名称 地域担当

神奈川 DWH-R90003¥B_User1

千葉 DWH-R90003¥D_User1

各担当支店のデータのみアクセス可能(個人情報にはアクセス不可)

地域名称 支店名称 支店担当

神奈川横浜本部 DWH-R90003¥B01_User1

川崎支社 DWH-R90003¥B02_User1

千葉千葉中央支社 DWH-R90003¥D01_User1

千葉エリア支社 DWH-R90003¥D02_User1

Analysis Services サーバー名: DWH-R90003

SSAS サーバーのローカルグループ

ローカルユーザー

ローカルグループ メンバー 備考

Master_Group DWH-R90003¥Master_User1 コンテンツマネージャ

B_Group DWH-R90003¥B_User1 地域担当

神奈川

D_Group DWH-R90003¥D_User1 千葉

B01_Group DWH-R90003¥B01_User1

支店担当

横浜本部

B02_Group DWH-R90003¥B02_User1 川崎支社

D01_Group DWH-R90003¥D01_User1 千葉中央支社

D02_Group DWH-R90003¥D02_User1 千葉エリア支社

Analysis Services サーバー上のローカルグループのメンバー

15

使用したユーザー(Reporting Services サーバー)

Reporting Services サーバー上に用意したユーザーは、以下のとおりです(Analysis Services

サーバー上と同じ名前/パスワードのユーザーを作成します)。

ユーザーとグループ(Reporting Services サーバー)

グループは、以下の構成にしています。

ユーザー リスト(Reporting Services サーバー)

各ユーザーは、以下のグループへ所属させます。

ユーザー認証テーブル

以下のユーザー認証テーブルを作成します(ストアド プロシージャを使用したアクセス制御

で使用します)。

役割 アクセス可否 ユーザー名

コンテンツマネージャ すべてのデータにアクセス可能 DWH-DL58501¥Master_User1

End User

各担当地域のデータのみアクセス可能

地域名称 地域担当

神奈川 DWH-DL58501¥B_User1

千葉 DWH-DL58501¥D_User1

各担当支店のデータのみアクセス可能(個人情報にはアクセス不可)

地域名称 支店名称 支店担当

神奈川横浜本部 DWH-DL58501¥B01_User1

川崎支社 DWH-DL58501¥B02_User1

千葉千葉中央支社 DWH-DL58501¥D01_User1

千葉エリア支社 DWH-DL58501¥D02_User1

Reporting Services サーバー名: DWH-DL58501

SSRS サーバーのローカルグループ

ローカルユーザー

ローカルグループ メンバー 備考

Master_Group DWH-DL58501¥Master_User1 コンテンツマネージャ

B_Group DWH-DL58501¥B_User1 地域担当

神奈川

D_Group DWH-DL58501¥D_User1 千葉

B01_Group DWH-DL58501¥B01_User1

支店担当

横浜本部

B02_Group DWH-DL58501¥B02_User1 川崎支社

D01_Group DWH-DL58501¥D01_User1 千葉中央支社

D02_Group DWH-DL58501¥D02_User1 千葉エリア支社

Reporting Services サーバー上のローカルグループのメンバー

16

各 UserName に対して、空白の部分はすべてアクセス可能です。たとえば、DWH-DL58501¥

Master_User1 はすべてのデータへアクセス可能、DWH-DL58501¥B_User1 は「地域名称」

が「神奈川」であるすべての支店へアクセス可能です。

具体的な実装方法については、3 章で詳しく説明します。

固定ユーザーについて

固定ユーザーは、Reporting Services(SSRS)からデータソースへの接続ユーザーのことを指

します。以下のように設定しています。

地域コード 支店コード 地域名称 支店名称 UserName

B 神奈川 DWH-DL58501¥B_User1

D 千葉 DWH-DL58501¥D_User1

DWH-DL58501¥Master_User1

B B01 神奈川 横浜本部 DWH-DL58501¥B01_User1

B B02 神奈川 川崎支社 DWH-DL58501¥B02_User1

D D01 千葉 千葉中央支社 DWH-DL58501¥D01_User1

D D02 千葉 千葉エリア支社 DWH-DL58501¥D02_User1

作成場所 ユーザー 説明

RS サーバー上へ作成したユーザー

DWH-58501¥DBDataReaderReporting Services から DB への接続に利用

パススルー認証でDB サーバーへ接続

DWH-58501¥ASDataReaderReporting Services から Analysis Services への接続に利用

パススルー認証でAS サーバーへ接続

DB サーバー上へ作成したユーザー DWH-R90001¥DBDataReader

AS サーバー上へ作成したユーザー DWH-R90003¥ASDataReader

SSRS

SSAS

RDBMS

DWH-58501¥DBDataReader

DWH-58501¥ASDataReader

17

Reporting Services から RDBMS への接続ユーザーの設定方法

Reporting Services から RDBMS への接続ユーザー「DWH-R90001¥DBDataReader」に対

しては、次のように設定します。

ログイン アカウントとして、DWH-R90001¥DBDataReader を登録

サーバー ロールは、以下を設定

DWH-R90001¥DBDataReader と SQL¥DBDataReader を Public へ設定

データベース ユーザー マッピングは、MSCQIDWH データベースに対して設定

既定のスキーマは、dbo

DWH-R90001¥DBDataReader のログインを作成

サーバーロールはPublicに設定

MSCQIDWH のデータベース ロール メンバーシップを

Db_datareader に設定

18

Reporting Services から Analysis Services への接続ユーザーの設定方法

SSRS から Analysis Services への接続ユーザー「DWH-R90003¥ASDataReader」に対して

は、次のように設定します。

1. すべてのデータを読み取れる「ロール」を作成

2. ロールのメンバシップにユーザー「DWH-R90003¥ASDataReader」を追加する

3. ディメンション データの設定で、上記ユーザーがすべてのディメンション データを読み

取れるように設定する(ロール作成後の既定の設定は、すべてのディメンション データ

を読み取れる設定になっているため)。

ロールの設定方法については、4 章で詳しく説明します。

19

Reporting Services から RDBMS へのアクセス制御の実装方法(AD なし)

「AD なし」の環境で、Reporting Services から RDBMS へのアクセス制御は、以下のよう

に実装します。

Reporting Services の認証方式には「基本認証」を使用(設定は後述)

Reporting Services から RDBMS への接続ユーザーには「固定ユーザー」を使用。

前述の「DWH-R90001¥DBDataReader」

RDBMS のアクセス制御

ログイン ユーザーを元にして、事前に用意したユーザー アクセス権管理テーブルを使

用し、ストアド プロシージャ内でデータを絞り、レポートで表示するデータセットを作

成する

レポート内で「ログイン ユーザー名」を取得し、ストアド プロシージャ内でログイン ユ

ーザー名を引数にして、ユーザー アクセス権管理テーブル内のテーブルを検索し、権限

設定を取得、ユーザーごとに行レベルのアクセス制御を行う

具体的な実装方法は、2 章以降で詳しく説明します。

Reporting Services で基本認証を構成する方法

Reporting Services で基本認証を構成する方法は、次のとおりです。

1. テキスト エディタで SSRSReportServer.config を開きます。

2. <Authentication> を探します。

3. 下記のコードを <Authentication> の既存のエントリ上に貼り付けます

4. ファイルを保存します。

5. スケール アウト配置を構成した場合は、配置内の他のレポート サーバーに対して上記の

手順を繰り返します。

6. レポート サーバーを再起動して、現在開いているセッションを消去します。

詳細は、オンライン ブックの以下を参照してください

No. RS 認証 RS から RDBMS

への接続ユーザーRDBMS のデータに対するアクセス制御

1 基本認証(RS にローカルユーザーを登録)

固定ユーザー ログインユーザーを元にストアドプロシージャを読んでその中で絞る

SSRS

RDBMS

固定ユーザー

ユーザーアクセス権管理テーブル

<AuthenticationTypes>

<RSWindowsBasic />

</AuthenticationTypes>

20

Reporting Services で基本認証を構成する方法

http://msdn.microsoft.com/ja-jp/library/cc281309.aspx

Reporting Services から Analysis Services へのアクセス制御の実装方法

Reporting Services から Analysis Services へのアクセス制御は、以下のように実装します。

Reporting Services の認証方式には「基本認証」を使用

Reporting Services からAnalysis Servicesへの接続ユーザーには「固定ユーザーを使用」。

前述の「DWH-R90003¥ASDataReader」

Analysis Services のアクセス制御には「リンクレポート」を使用

具体的な実装方法は、2 章以降で詳しく説明します。

No RS 認証 RS から SSAS

への接続ユーザーSSASのアクセス制御

1 基本認証(RSにローカルユーザーを登録)

固定ユーザー リンクレポート使用

SSRS

SSAS固定ユーザー

リンク レポートを使用

21

Excel から Analysis Services へのアクセス制御の実装方法

Excel から Analysis Services へのアクセス制御は、以下のように実装します。

ユーザー アカウント/グループに対するロールの設定は、ローカル グループまたはロー

カル ユーザーに対して設定を行うことができます。

ユーザーは、AS サーバーのローカル ユーザー/パスワードを指定して接続します。

この方法では、パスワードが平文で接続 ファイル(.odc ファイル)へ設定されるため、

特別な注意が必要であり、可能な限り「AD あり」を推奨します。

この方法では、ユーザーは、Excel の「データ」タブから「その他のデータソース」→「Analysis

Services」を選択して、データ接続ウィザードで Analysis Services 上のローカル ユーザー

とパスワードを指定して接続します。この際に、以下を設定します。

[パスワードをファイルへ保存する]をチェック

[常にこのファイルを使用してデータを更新する]をチェック

SSASのアクセス制御

アカウント/グループに対するロールの設定

22

Excel からレポート アクションを使用する場合

レポート アクションでは、参照している階層をパラメータとしてレポートに渡すだけなので、

前述の「Reporting Services から RDBMS へのアクセス制御」で記載した実装を行っていれ

ばアクセス制御が可能です。

レポート アクションの利用例

23

個人情報の制御の実現方法

レポートで表示するデータセットを作成するストアド プロシージャ内で下記のような処理を

実装します。

個人情報が見られるユーザー

→ 個人情報の入ったカラム情報をそのまま出す

個人情報が見られないユーザー

→ 個人情報の入ったカラム情報をすべてアスタリスクで返す SQL 文を実装

まとめ: 「AD なし」の場合のアクセス制御の実装方法

RDBMS へのアクセス制御は「ストアド プロシージャ」を使用

ストアド プロシージャ内で行レベル セキュリティと個人情報の制御を実装

Analysis Services へのアクセス制御は「リンクレポート」を使用

RS 認証 RS → RDBMS

のユーザーRS→SSAS

のユーザーRS→SSASのアクセス制御

RS → RDBMS

のアクセス制御Excel → AS

のアクセス制御

基本認証 固定ユーザー 固定ユーザー リンクレポート使用 ログインユーザーを元にストアドプロシージャを呼んでその中で絞る

アカウントに対するロールの設定

SSRS

SSAS

RDBMS

ユーザーアクセス権管理テーブル

24

その他のアクセス制御方式の紹介(補足)

Reporting Services Web サービスによるアクセス制御

Reporting Services Web サービスを利用して、レポートを実行/表示する Web アプリケーシ

ョンケーションによってアクセスを制御することも可能です。

Reporting Services Web サービスの呼び出しは、ReportViewer コントロールをホストす

ることでラップ可能

ユーザー アクセス権テーブルにより、レポートに与えるパラメータを制御

クライアントから Reporting Services へは、直接アクセスさせない

アクセス制御のロールの数が多くても対応可能

Forms 認証による独自認証の組み込みも可能

ただし、リンクレポートの数が 100 くらいまでならば、リンクレポートで対応した方が工

数が少なくて済むため、今回の検証ではリンクレポートで対応

SSRS

SSAS

RDBMS

ユーザーアクセス権テーブルにより、レポートに与えるパラメータを制御

レポート

固定

ユーザーアクセス権管理テーブル

ReportViewerコントロールを使用

25

1.5 レポート マネージャについて

アクセス制御の設定には、Reporting Services の「レポート マネージャ」を利用するので、

ここでは、レポート マネージャの利用方法を説明します。

レポート マネージャで行えること

レポート マネージャで行えることは、以下のとおりです。

レポートの表示や検索

フォルダ階層の作成

アクセス制御の設定 など

レポート マネージャのルート ノードの名前は、「ホーム」です。ホームへフォルダを作成し

て、格納するレポートやアイテムの整理を行うことができます。

レポート マネージャの起動

レポート マネージャを起動するには、Internet Explorer(IE)から次の URL へアクセスし

ます。

http://<ComputerName>/reports

今回の検証で使用した環境では、以下の URL で開くことができます。

AD (Active Directory) レポートマネージャURL

AD あり http://DWH-DL58501/reports

AD なし http://DWH-DL58503/reports

4

レポートマネージャの

「ホーム」

26

1.6 レポート マネージャからの操作

データソースの設定

Reporting Services では、データを参照するには「データソースの設定」が必要です。

前述したように、今回の検証では、「AD あり」と「AD なし」の場合の両ケースとも、RDBMS

/Analysis Services へ接続するためのデータソースには、「固定ユーザー」を使用して、接続

する設定を行っています。

設定方法

データソースに対して、固定ユーザーを設定するには、設定対象のデータソースのプロパティ

を開き、「レポート サーバーへ保存され、セキュリティで保護された資格情報」を選択し、「デ

ータソースへの接続時に Windows 資格情報として使用する」チェックボックスをチェックし

ます。

SSAS

RDBMS

Sql¥DBDataReader

例) B_User1でログインした場合

sql¥B_User1

Windows認証

DWH-DL58501¥B_User1

SSRS(DWH-DL58501)

Windows認証

SSRS(DWH-DL58503)

DWH-DL58501¥DBDataReader

固定ユーザーで認証

sql¥ASDataReaderr

DWH-DL58501¥DBDataReader

AD あり

AD なし

27

今回作成したデータソース

今回の検証では、以下のデータソースを作成しています。

フォルダに関する操作

フォルダを作成する目的は、フォルダの追加/変更/削除によって、レポート サーバーのフ

ォルダを階層構造化するためです。

今回作成したフォルダの構成(地域/支店フォルダ)

今回は、地域/支店ごとにフォルダを作成し、その中へリンクレポートを格納します。また、

作成したフォルダに対して、地域/支店ユーザー グループに対してロールの設定を行います。

以下のような構成でフォルダを作成します。

作成手順

フォルダを作成する手順は、次のとおりです。

1. Master_User1(コンテンツ マネージャ)でレポート マネージャを開きます。

2. [新しいフォルダ]を選択します。

データソース名 サーバー 対象

MSCQIDWH DWH-R90001 MSCQIDWH (データベース)

MSCQIDWH_AS DWH-R90003 MSCQIDWH_AS (SSASキューブ)

ホーム MSDWHCQI

データソース

B_Kanagawa

D_Chiba

B01_Yokohama

B02_Kawasaki

D01_ChibaChuo

D02_ChibaArea

レポート配置により作成

新規作成

→ 配置されたレポートを格納

→ データソースを格納

→ 神奈川

(地域)

→ 千葉

(地域)

→ 横浜本部

(支店)

→ 川崎支社

(支店)

→ 千葉中央支社

(支店)

→ 千葉エリア支社

(支店)

28

3. [名前]へフォルダ名を入力、任意で[説明]を入力します。ここでは、「B_Kanagawa」

と入力しています。

4. 「B_Kanagawa」フォルダが作成されました。

5. 他のフォルダについても、同様の手順で作成します。

この作業は、フォルダを作成する場所(ホーム/フォルダ)で行います。

29

1.7 リンクレポートの操作

リンクレポートは、既存のレポートへのアクセス ポイントを提供し、元のレポートとは異な

るパラメータ値またはプロパティで既存のレポートのレポート定義への参照を行います。

既存のレポートでパラメータが使用されている場合は、既存のレポートで指定されているパラ

メータ値とは異なる値を設定することができます(既存のレポートからは、複数のリンクレポ

ートを作成することができます)。

リンクレポートは、以下のように利用することができます。

レポートの既定値を「地域」によって変更したい場合

レポートに対して、異なるセキュリティをかけたい場合

レポート名を変更したい場合

既存のレポートとは、別の場所へ格納したい場合

ただし、リンク レポートをもとに別のリンク レポートを作成することはできません。

リンクレポートに関する操作

リンクレポートに関しては、以下の操作が可能です。

リンクレポートの作成

リンクレポートの削除

リンクレポートのパラメータの変更

リンクレポートの概念

リンクレポートは、概念的には、プログラムを実行したり、ファイルを開いたりするために使

用するプログラムのショートカットに似ています。

ユーザーA

10月A支店

売上

レポート

リンクレポート

Parameter年月= 10月

Parameter支店= A支店

月別売上

レポート

レポート

[既定値]

Parameter年月= NULL

Parameter支店= NULL

11月A支店

売上

レポート

リンクレポート

Parameter年月= 11月

Parameter支店= A支店

11月・B支店で

レポートを実行

10月・A支店で

レポートを実行

30

今回作成したリンクレポート

今回の検証では、以下のようにリンクレポートを作成しました。

※ リンクレポートの名前は、元のレポートの名前と同じにしています。

リンクレポートの作成手順

リンクレポートの作成手順は、次のとおりです。

1. リンクレポートの作成元のレポートを選択(ここでは CQI_RS1 を選択)して、[編集]を

クリックします。この作業は、ツールバーの右端の[詳細の表示/非表示]をクリックして、

詳細を表示した状態で行う必要があります。

2. [名前]にリンクレポート名を入力、任意で[説明]を入力します。

3. [場所の変更]をクリックします。

ホーム B_Kanagawa

D_Chiba

B01_Yokohama

B02_Kawasaki

D01_ChibaChuo

D02_ChibaArea

CQI_RS1

CQI_RS5

CQI_RS6

CQI_RS1

CQI_RS5

CQI_RS6

CQI_RS1

CQI_RS1

CQI_RS1

CQI_RS1

フォルダ

リンクレポート

「CQI_RS1」レポートに基づいたリンクレポートを作成します。

・「CQI_RS1」という名前でリンクレポートを作成します。

・「Kanagaewa_Report」という説明をつけます。

31

4. リンクレポートを作成するフォルダを選択します。

5. [OK]ボタンをクリックします。

6. 指定場所にリンクレポートが作成されました。

リンクレポートの作成場所(ホーム/フォルダ)を指定します。

B_Kanagawaフォルダにリンクレポートを作成します。

指定したB_Kanagawaフォルダにリンクレポートが作成されました。

32

2.アクセス制御の実装手順

ここでは、アクセス制御の具体的な実装手順について説明します。

2.1 アクセス制御の実装手順

アクセス制御では、次の 2 つを実施します。

(1) リンクレポートのパラメータの設定

パラメータの既定値を設定し、非表示にする

目的: ユーザーに他のデータを参照できないようにパラメータを固定値/非表示化

(2) ホームとアイテムに対するロールの割り当て

レポートへのロールの割り当て

目的: フォルダ内にあるレポートの参照の可否を設定する

フォルダへのロールの割り当て

目的: フォルダの参照可否を設定する

2.2 リンクレポートのパラメータの設定

既定値の設定/変更

既存のレポートで設定したレポート パラメータの既定値は、レポート マネージャ上で設定/

変更することができます。 ※ ただし、「固定値」から「クエリ ベース」への変更はできませ

ん。

パラメータを非表示へ設定

レポート マネージャ上でリンクレポートのパラメータを設定後、ユーザーからパラメータ値

を変更できないようにするために、非表示へ設定します。

今回設定したレポート パラメータ

今回の検証では、以下のようにリンクレポートの店舗階層パラメータの既定値を設定しました。

33

設定手順

設定手順は、次のとおりです。

1. レポートの[編集]をクリックします。

2. [プロパティ]タブで[パラメータ]を選択します。

3. すでに既定値が設定されている場合は、[既定値あり]のチェックを外して、[適用]をク

リックします。

ホーム B_Kanagawa

D_Chiba

B01_Yokohama

B02_Kawasaki

D01_ChibaChuo

D02_ChibaArea

CQI_RS1

CQI_RS5

CQI_RS6

CQI_RS1

CQI_RS5

CQI_RS6

CQI_RS1

CQI_RS1

CQI_RS1

CQI_RS1

フォルダ

リンクレポート

[M Store].[店舗階層].[支店].&[B01]

[M Store].[店舗階層].[支店].&[B02]

[M Store].[店舗階層].[支店].&[D01]

[M Store].[店舗階層].[支店].&[D02]

[M Store].[店舗階層].[地域].&[B]

[M Store].[店舗階層].[地域].&[B]

[M Store].[店舗階層].[地域].&[B]

[M Store].[店舗階層].[地域].&[D]

[M Store].[店舗階層].[地域].&[D]

[M Store].[店舗階層].[地域].&[D]

既定値

B_Kanagawaフォルダ配下にあるリンクレポート「CQI_RS1」の「店舗階層」パラメーターの既定値を設定します。

34

4. 画面を更新します。

5. [既定値あり]へチェックを入れて、既定値を入力します。

6. [非表示]と[ユーザーにメッセージを表示]のチェックを外します。

[適用]を押下したあと、ブラウザの更新ボタンまたはF5キーで画面の更新を行う。

→更新を行わないと、既定値が「クエリベース」のままとなり、入力できない。

「店舗階層」パラメーターの既定値として

「[M Store].[店舗階層].[地域].&[B]」(神奈川地域)を設定します。

設定した地域/支店以外のデータを見れないようにするため、パラメータの値を変更できないように 「非表示」・「ユーザーにメッセージを表示」のチェックボックスを OFF に設定します。

⇒ 「非表示」のチェックボックスを OFF に設定するのみでは、URL からのパラメータの指定は可能な状態です。「ユーザーにメッセージを表示」のチェックボックスを併せてOFF に設定して、ユーザーからは操作できないようにする必要があります。

35

7. 既定値を設定して、パラメータを非表示へ設定できました。

36

2.3 ホームとアイテムに対するアクセス制御(ロールの割り当て)

レポートやフォルダへのアクセスは、グループまたはユーザーへロールを割り当てることでホ

ームまたはアイテムへのアクセス制御設定ができます。

閲覧可能範囲

閲覧可能フォルダのみにロールの割り当てを行うと、各ユーザーの閲覧可能範囲は、以下のよ

うになります。

2.4 ロールの種類

ロールには、「アイテム レベルのロール」と「システム レベルのロール」があります。

アイテム レベルのロール

アイテム レベルのロール(アイテム ロール)には、レポート サーバーで格納および管理さ

れているアイテムに関連するタスクが含まれています。

レポートの管理

フォルダの表示

リンクレポートの作成 など

システム レベルのロール

システム レベルのロール(システム ロール)の定義には、サイト全体に適用するタスクが含

まれています。

タスク2

タスク3

コンテンツマネージャロール

タスク1

ユーザー②

ユーザー③

フォルダA レポートA

グループⅠ

ユーザー①

コンテンツマネージャロール

ホーム閲覧者ロール

ロールの定義※ユーザー①はすべてのアイテムに対して

コンテンツ マネジャ ロールを割り当てる。

ロールの割り当て

フォルダB レポートB

ユーザー⑤のみ閲覧

ユーザー④

ユーザー⑤

グループⅡ

閲覧者ロール

レポートのセキュリティを継承

グループⅡのみ閲覧

閲覧者ロール

ホームのセキュリティを継承

グループⅠ グループⅡ

ユーザー① ユーザー② ユーザー③ ユーザー④ ユーザー⑤

ホーム コンテンツマネージャ 閲覧者 閲覧者 閲覧者 閲覧者

フォルダA コンテンツマネージャ 閲覧者 閲覧者 閲覧者 閲覧者

レポートA コンテンツマネージャ 閲覧者 閲覧者 閲覧者 閲覧者

フォルダB コンテンツマネージャ 閲覧者 閲覧者

レポートB コンテンツマネージャ 閲覧者

37

レポート サーバーのプロパティを表示

ロールの管理

レポート サーバーのセキュリティを管理 など

ホームまたはアイテムに対してアクセス制御を行う場合には、「アイテム ロール」を割り当て

ます。

定義済みロール

レポート マネージャには、既に定義済みのロールがいくつか用意されています。

参考: http://msdn.microsoft.com/ja-jp/library/ms157363(SQL.100).aspx

今回は、管理者グループに対して「コンテンツ マネージャ」ロールを、一般ユーザー グルー

プに対して「閲覧者」ロールを割り当てます。

※ サーバーの Administrators ローカル グループのメンバーも、コンテンツ マネージャとして

すべてのアイテムにコンテンツ マネージャ ロールを保有しています。

2.5 アイテムに対するアクセス制御の初期設定

フォルダやリンクレポート、レポート等のアイテムに対するセキュリティの初期設定は、親ア

イテムのアクセス設定を継承しています。

・ホーム配下のフォルダとレポートなどは、ホームの設定を継承

・B_Kanagawa フォルダ配下のフォルダとレポートなどは、B_Kanagawa の設定を継承

親アイテムを継承しない設定

親アイテムからの継承とは別の設定にする(アイテムごとに個別の設定へ変更する)には、各

アイテムの[プロパティ]の[セキュリティ]から「アイテムのセキュリティを編集」をクリ

ックします。

AD ユーザーグループ 役割 割り当てるアイテムロール

ADありsql¥Master_Group 管理者 コンテンツマネージャロール

sql¥Master_Group 以外 一般ユーザー 閲覧者ロール

ADなしDWH-DL58501¥Master_Group 管理者 コンテンツマネージャロール

DWH-DL58501¥Master_Group 以外 一般ユーザー 閲覧者ロール

38

設定手順

アクセス制御の設定手順は、AD あり/AD なしともほぼ同様で、指定するユーザーが AD ユ

ーザーか、ローカル ユーザーかの違いのみです。以降は、AD ありの場合の設定手順です。

1. [アイテムのセキュリティを編集]を選択することで、個別の設定へ編集することが可能

です。

2. [OK]をクリックします。

親のセキュリティを継承する場合(既定へ戻す場合)

1. [親のセキュリティに戻す]を選択します。

2. [OK]をクリックします。

Default では親フォルダのセキュリティを受け継ぐ

設定(親フォルダと同様の設定)になっています。

親アイテムの設定を継承しない

親アイテムの設定を継承させる CQI_RS1のセュリティ設定を親フォルダ(B_Kanagawa)と同じ設定に戻します。

39

3. フォルダと同じセキュリティ設定へ戻りました。

今回設定したアクセス制御

今回の検証では、以下のようにユーザー グループに対してロールを割り当てました。

45

ホーム

●Master_Group

◆B_Group

◆B01_Group

◆B02_Group

◆D_Group

◆D01_Group

◆D02_Group

B_Kanagawa

●Master_Group

◆ B_Group

◆ B01_Group

◆ B02_Group

●Master_Group

◆ B_Group

データソース

●Master_Group

MSDWHCQI

●Master_Group

◆ B_Group

◆ B01_Group

◆ B02_Group

◆ D_Group

◆ D01_Group

◆ D02_Group

B01_Yokohama

●Master_Group

◆B_Group

◆B01_Group

データソース

(親フォルダの

アクセス制御を継承)

(親フォルダの

アクセス制御を継承)

B02_Kawasaki

●Master_Group

◆B_Group

◆B02_Group

(親フォルダの

アクセス制御を継承)

D_Chiba

●Master_Group

◆ D_Group

◆ D01_Group

◆ D02_Group

●Master_Group

◆ D_Group

D01_ChibaChuo

●Master_Group

◆D_Group

◆D01_Group

(親フォルダの

アクセス制御を継承)

D02_ChibaArea

●Master_Group

◆D_Group

◆D02_Group

(親フォルダの

アクセス制御を継承)

CQI_Meisai

(親フォルダの

アクセス制御を継承)

CQI_RSXX

●Master_Group

●コンテンツマネージャロール

◆閲覧者ロール

フォルダレポート

40

2.6 ホームに対するセキュリティ設定

レポート マネージャの「ホーム」に対するセキュリティ設定を行います。

グループまたはユーザーへのロールの割り当て

グループまたはユーザーからロールのはく奪

設定手順

設定手順は、次のとおりです。この作業は、コンテンツ マネージャ ロールを持つユーザー

(Master_User1)から実行します。

1. ホームの[プロパティ]タブをクリックします。

2. [新しいロールの割り当て]をクリックします。

3. ロールを与えるグループ名またはユーザー名を入力して、与えるロールへチェックを入れ

ます。ここでは、sql¥B_Group グループを指定しています。

4. ホームに対して、sql¥B_Group へ閲覧者ロールが割り当てられました。

Sql¥B_Groupに対して「閲覧者」ロールを割り当てます。

41

ホームからロールをはく奪する場合

1. グループまたはユーザーから、ロールをはく奪する場合は、解除するグループまたはユーザ

ーへチェックを入れて、[削除]をクリックします。

2. [OK]をクリックします。

3. 選択したグループからロールがはく奪されました。

Administrator以外のグループから「閲覧者」ロールをはく奪します。

42

2.7 フォルダに対するセキュリティ設定

レポート マネージャのフォルダに対するセキュリティ設定を行います。

グループまたはユーザーへのロールの割り当て

グループまたはユーザーからロールをはく奪

設定手順

設定手順は、次のとおりです。この手順は、コンテンツ マネージャ ロールを持つユーザー

(Master_User1)から実行します。また、詳細を表示した状態で設定します。詳細の表示/

非表示は、レポート マネージャの右上の「詳細の表示」で切り替えが可能です。

フォルダに対するロールの割り当て

1. ロールの割り当てを行うフォルダの[編集]をクリックします。

2. [セキュリティ]で、[新しいロールの割り当て]をクリックします。

3. ロールを割り当てるユーザーまたはグループを入力して、割り当てるロールへチェックを

入れ、[OK]をクリックします。

「B01_Yokohama」フォルダに対して「sql¥B01_Group」に閲覧者ロールを割り当てます。

43

4. グループにロールが割り当てられました。

フォルダからロールをはく奪する場合

1. フォルダからロールをはく奪するには、セキュリティ設定を行うフォルダの[編集]をクリ

ックします。

2. グループまたはユーザーから、ロールをはく奪する場合は、解除するグループ/ユーザー

へチェックを入れて、[削除]をクリックします。

3. 選択したユーザー/グループのロールがはく奪されました。

「 B_Kanagawa」フォルダに対して「sql¥B01_Group」から閲覧者ロールをはく奪します。

44

2.8 リンクレポート(レポート)に対するセキュリティ設定

レポート マネージャのリンクレポート(レポート)に対するセキュリティ設定を行います。

リンクレポートおよびレポートともに、設定手順は同様です。

グループまたはユーザーへのロールの割り当て

グループまたはユーザーからロールをはく奪

リンクレポート(レポート)に対するロールの割り当て

この作業は、コンテンツ マネージャ ロールを持つユーザー(Master_User1)から実行しま

す。また、詳細を表示した状態で設定します。詳細の表示/非表示は、レポート マネージャ

の右上の「詳細の表示」で切り替えることができます。

1. レポートのプロパティで[新しいロールの割り当て]を選択します。

2. ロールを与えるグループ名またはユーザー名を入力して、与えるロールへチェックを入れ

ます。ここでは、sql¥B01_Group グループを指定しています。

3. レポートに対して、sql¥B01_Group へ閲覧者ロールが与えられました。

B_Kanagawaフォルダ配下の

「CQI_RS1」に対して「sql¥B01_Group」に閲覧者ロールを割り当てます。

45

リンクレポート(レポート)からロールをはく奪する場合

1. リンクレポートからロールをはく奪する場合は、レポートの[編集]をクリックします。

2. グループまたはユーザーからロールをはく奪する場合は、解除するグループ/ユーザーへ

チェックを入れて、[削除]をクリックします。

3. 選択したユーザー/グループのロールがはく奪されました。

リンクレポート「CQI_RS1」からロールをはく奪します。

「sql¥B01_Group」と「sql¥B02_Group」から「閲覧者ロール」をはく奪します。

46

2.9 レポートの直 URL だけを公開する場合のセキュリティ設定

アイテムに対するアクセス制御設定

ホームを公開せず、レポートの URL を直接指定して実行する場合(Report Viewer など)、閲

覧可能フォルダのみにロールを割り当て、レポートはフォルダのセキュリティを継承させます。

ホームまたはアイテムへのアクセス制御設定ができます。

閲覧可能範囲

閲覧可能フォルダのみにロールの割り当てを行うと、各ユーザーの閲覧可能範囲は、以下のよ

うになります。

ホームを使用する場合、同一フォルダ内で、レポートは表示せず、下位のフォルダに移動する

ためのフォルダを表示させるような設定を行う必要があります。

レポートの直 URL のみを公開する場合、ユーザーが閲覧可能なレポートが格納されたフォル

ダのみに権限を与えるだけで設定が可能となり、ホームを使用した場合よりも設定を簡略化す

ることができます。

タスク2

タスク3

コンテンツマネージャロール

タスク1

ユーザー②

ユーザー③

フォルダA レポートA

グループⅠ

ユーザー①

フォルダのセキュリティを継承

コンテンツマネージャロール

ホーム閲覧者ロール

ロールの定義※ユーザー①はすべてのアイテムに対して

コンテンツ マネージャ ロールを割り当てる

ロールの割り当て

フォルダB レポートB

フォルダのセキュリティを継承

ユーザー④

ユーザー⑤

グループⅡ

閲覧者ロール

閲覧者ロール

グループⅠ グループⅡ

ユーザー① ユーザー② ユーザー③ ユーザー④ ユーザー⑤

ホーム コンテンツマネージャ

フォルダA コンテンツマネージャ 閲覧者

レポートA コンテンツマネージャ 閲覧者

フォルダB コンテンツマネージャ 閲覧者

レポートB コンテンツマネージャ 閲覧者

47

2.10 アクセス制御設定(URL指定)

今回設定したアクセス制御

以下のようにユーザーグループに対してロールを割り当てます。

ホーム

●Master_Group

B_Kanagawa

●Master_Group

◆ B_Group (親フォルダの

アクセス制御を継承)

データソース

(親フォルダのアクセス制御を継承)

MSDWHCQI

(親フォルダの

アクセス制御を継承)

B01_Yokohama

●Master_Group

◆B_Group

◆B01_Group

データソース

(親フォルダの

アクセス制御を継承)

(親フォルダの

アクセス制御を継承)

B02_Kawasaki

●Master_Group

◆B_Group

◆B02_Group

(親フォルダの

アクセス制御を継承)

D_Chiba

●Master_Group

◆ D_Group (親フォルダの

アクセス制御を継承)

D01_ChibaChuo

●Master_Group

◆D_Group

◆D01_Group

(親フォルダの

アクセス制御を継承)

D02_ChibaArea

●Master_Group

◆D_Group

◆D02_Group

(親フォルダの

アクセス制御を継承)

CQI_Meisai

◆ B_Group

◆ B01_Group

◆ B02_Group

◆ D_Group

◆ D01_Group

◆ D02_Group

CQI_RSXX

(親フォルダの

アクセス制御を継承)

●コンテンツマネージャロール

◆閲覧者ロール

フォルダレポート

48

3.RDBMS へ接続する際のアクセス制御の実装方法

3.1 RDBMS へ接続する際のストアド プロシージャによるアクセス

今回の検証のように、使用ユーザーによってデータの閲覧を制限する場面では、ほとんどの場

合で行レベルのアクセス制御を行う必要があり、場合によっては閲覧許可の条件の仕様が煩雑

になることもあります。

そのような場合は、データセットのクエリにストアド プロシージャを実装することで、パフ

ォーマンスおよび拡張性で非常に大きなメリットを得られます。

ストアド プロシージャを利用するメリットは、次のとおりです。

単一の SELECT 文では実現不可能な仕様でも、プログラミングが可能になるため、ほと

んどの仕様へ対応できます。

コストが高いテーブル結合や副問い合わせの処理を、複数ステップへ分割したり、プロ

グラミングに置き換えることでパフォーマンスが向上します。

パフォーマンス チューニングで考えられる手法の幅が大幅にアップします。

Reporting Services の実装箇所(データセットの設定)

ストアド プロシージャを利用するには、データセットの[クエリ]を変更します。[クエリの

種類]には、「テキスト」や「テーブル」を利用するのが一般的ですが、これを「ストアド プ

ロシージャ」へ設定することで、ストアド プロシージャを利用できるようになります。

データセットへの実装の詳細は、別冊の「レポート作成手順(Reporting Services 構築手順)」

を参考にしてください。

「クエリの種類」 を 「ストアドプロシージャ」 へ設定する

ストアド プロシージャを指定する

49

3.2 Reporting Services へ実装する場合の考慮事項

ストアド プロシージャを Reporting Services へ実装する場合の考慮事項は、次のとおりです。

ストアド プロシージャの種類

ユーザー定義関数にする必要はなく、ストアド プロシージャで問題ありません。

引数

Reporting Services に実装する際に、引数の変数名と同じ名称のレポート パラメータが作

成されるので、それを考慮した命名を行います。

レポートの設定で、引数へ対応するレポート パラメータの変更は可能ですが、初回は必ず

引数の変数名のレポート パラメータが作成されます(通常はそのまま使用します)。

引数の変数名は、必ず半角英数で命名します。

レポート パラメータは、URL の一部となるので、半角英数以外の文字が含まれるとエン

コーディングが発生します。不要なエンコーディングを避けるために、変数名は半角英数

を使用します。

アウトプット

データ返却用に OUTPUT 用の引数を用意する必要はありません。

アウトプットを伴う SQL およびコマンドは、1 回しか使用できません。複数回使用した場

合は、レポートで正しくデータを受けることができません。

たとえば、SELECT~FROM 文はアウトプットが発生するので 1 回しか使用できませんが、

SELECT ~INTO 文や SELECT @Param=Column FROM 文は、アウトプットが発生し

ないので複数回使用することが可能です。また、xp_cmdshell 等のアウトプットが発生す

るコマンドについても、同様に使用が制限されます。

ユーザー名の取得について

ストアド プロシージャでは、引数で渡されたユーザー名によってアクセス制御を行います。

このユーザー名は、Reporting Services から渡す必要があります。

Reporting Services でユーザー名を取得して、ストアド プロシージャへ渡すには、以下の

準備をする必要があります。

ストアド プロシージャには、クエリ パラメータ経由で値を引き渡すので、引き渡し用

のクエリ パラメータを用意します。今回は[UserName]というクエリ パラメータを

作成します。

クエリ パラメータには、組み込みフィールド[UserID]の値を設定します。このフィ

ールドでレポートを実行しているユーザーの ID が取得可能です。

Windows 認証を使用している場合は、ユーザーのドメイン アカウント、基本認証を使

用している場合は、ユーザー名を取得できます。ユーザー名は、Domain¥UserName ま

たは ServerName¥UserName の形で取得されます。

50

3.3 Reporting Services でのユーザー名の取得方法

Reporting Services で、ユーザー名を取得する方法は、次のとおりです。

UserName パラメータの設定

1. パラメータ「UserName」を右クリックして、[パラメータのプロパティ]を選択します。

2. パラメータのプロパティの[既定値]で、オプションから「値の指定」を選択し、[追加]

を選択後、右側の「fx」をクリックします。

3. [カテゴリ]の「組み込みフィールド」を選択し、[アイテム]から「UserID」を選択し

51

ます。

4. 値が設定されていることを確認して、[OK]でプロパティを閉じます。

[アイテム]から「UserID」を選択すると、式として自動的に入力されます。

52

3.4 ストアド プロシージャの処理の概要

ストアド プロシージャの処理の概要は、次のとおりです。

1. 引数のユーザー名によるアクセス権限の判断

① クエリ パラメータ「UserName」経由で、組み込みフィールド「UserID」の値が

Reporting Services から渡されます。

② ① の値でテーブル「UserMapping」を検索して、権限設定を取得します。

③ ユーザーごとに行レベルのアクセス制御を実現します。

2. ユーザー名以外の引数による各抽出条件の判断

① 1. 以外のクエリ パラメータに、本レポートを呼び出す別のレポートやキューブのアク

ション設定から値が渡されます。

② 各クエリ パラメータ経由でマッピングされた引数(基本的にクエリ パラメータと同

名)へ値が渡されます。

③ フィルタの指定に、キューブの階層が使用されているため、それへ対応して各引数(レ

ポート パラメータも同様)は、~key(条件の値)、~level(階層のレベル)の対にな

っています。~level の値によって、抽出対象のカラムを決定します。

3. 上記の条件に沿った DML の作成および実行

① 上記の条件を満たす SQL の文字列を組立て実行します。

引数のユーザー名によるアクセス権限の判断

テーブル[UserMapping]のレイアウトは、次のとおりです。

アクセス制御の実現方法

テーブル「UserMapping」のカラム「UserName」と引数「@UserName」が一致する行を検

索します。

一致する行がない場合

すべてのデータに対して、参照権限はありません。

データ抽出の DML の WHERE 句の地域コードと支店コードにありえない値を設定し

データがヒットしないように設定します。

一致する行がある場合

地域コード、支店コードのいずれも設定されていない場合、データの参照制限はありませ

ん。データ抽出の DML の WHERE 句には何も設定しません。

地域コード、支店コードのいずれか、あるいは両方が設定されている場合、データ抽出の

列名 データ型

地域コード NCHAR(1)

支店コード NCHAR(3)

地域名称 NVARCHAR(8)

支店名称 NVARCHAR(20)

UserName NVARCHAR(50)

53

DML の WHERE 句に地域コード、支店コードのいずれか、あるいは両方を設定します。

支店コードが設定される場合、顧客名を‘**********’で返すように設定します。

T-SQL の実装例

T-SQL の実装例は、次のとおりです。

ユーザー名以外の引数による各抽出条件の判断

WHERE 句の設定は、~key(条件の値)、~level(階層のレベル)の値によって決定するこ

とができます。これはキューブの階層構造へ対応するためです。例として、店舗階層の

-- ユーザー管理テーブル取得

SELECT

@ChiikiCD = [地域コード],

@ShitenCD = [支店コード]

FROM

[UserMapping]

WHERE

UPPER ([UserName]) = UPPER (@UserName)

;

IF @@ROWCOUNT > 0

BEGIN

IF @ChiikiCD IS NOT NULL AND @ChiikiCD <>''

BEGIN

--地域コードの条件をセット

IF @sSQL_WHERE = ''

SET @sSQL_WHERE = @sSQL_WHERE + N'WHERE ';

ELSE

SET @sSQL_WHERE = @sSQL_WHERE + N'AND ';

SET @sSQL_WHERE = @sSQL_WHERE +

N'stor.地域コード= @TblRegion ';

END;

IF @ShitenCD IS NOT NULL AND @ShitenCD <> ''

BEGIN

--支店コードの条件をセット

IF @sSQL_WHERE = ''

SET @sSQL_WHERE = @sSQL_WHERE + N'WHERE ';

ELSE

SET @sSQL_WHERE = @sSQL_WHERE + N'AND ';

SET @sSQL_WHERE = @sSQL_WHERE +

N'stor.支店コード= @TblBranch ';

END;

END;

ELSE

BEGIN --ユーザーが登録されていない場合はありえない条件をセット

IF @sSQL_WHERE = ''

SET @sSQL_WHERE = @sSQL_WHERE + N'WHERE ';

ELSE

SET @sSQL_WHERE = @sSQL_WHERE + N'AND ';

SET @sSQL_WHERE = @sSQL_WHERE +

N'stor.地域コード IS NULL AND stor.支店コード IS NULL ';

END;

54

Store_key と Store_level の関係のイメージを、以下に示します。

店舗階層の例

抽出条件の判断方法を「店舗階層」を例に説明します。

Store_level が Null あるいは 0 の場合、抽出条件は指定されていません。

データ抽出の DML の WHERE 句には何も設定しません。

Store_level > 0 の場合

Store_level = 1 の場合、データ抽出の DML の WHERE 句に「地域コード」を

Store_key の値で抽出するように設定します。

Store_level = 2 の場合、データ抽出の DML の WHERE 句に「支店コード」を

Store_key の値で抽出するように設定します。

Store_level = 3 の場合、データ抽出の DML の WHERE 句に「店舗 ID」を Store_key

の値で抽出するように設定します。

T-SQL の実装例

その他の階層について

その他の階層についても、同様に抽出条件の判断を設定します。それぞれの階層が使用してい

る~key と ~level の関係のイメージは、次のとおりです。

Store_key項目 Store_level

全て (条件なし) 0

地域 1

支店 2

店舗 3

--店舗階層

IF (@Store_level IS NOT NULL) AND (@Store_level > 0)

BEGIN

IF @Store_level = 1 --地域

BEGIN

IF @sSQL_WHERE = ''

SET @sSQL_WHERE = @sSQL_WHERE + N'WHERE ';

ELSE

SET @sSQL_WHERE = @sSQL_WHERE + N'AND ';

SET @sSQL_WHERE = @sSQL_WHERE + N'stor.地域コード= @Region ';

END;

ELSE IF @Store_level = 2 --支店

BEGIN

IF @sSQL_WHERE = ''

SET @sSQL_WHERE = @sSQL_WHERE + N'WHERE ';

ELSE

SET @sSQL_WHERE = @sSQL_WHERE + N'AND ';

SET @sSQL_WHERE = @sSQL_WHERE + N'stor.支店コード= @Branch ';

END;

ELSE IF @Store_level = 3 --店舗

BEGIN

IF @sSQL_WHERE = ''

SET @sSQL_WHERE = @sSQL_WHERE + N'WHERE ';

ELSE

SET @sSQL_WHERE = @sSQL_WHERE + N'AND ';

SET @sSQL_WHERE = @sSQL_WHERE + N'sales.店舗ID = CAST (@Store AS INT) ';

END;

END;

55

時間階層

住所階層

商品階層

支払階層

年齢階層

性別階層

Time_key項目 Time_level

全て (条件なし) 0

年 1

半期 2

四半期 3

月 4

Address_key項目 Address_level

全て (条件なし) 0

地域 1

支店 2

ProductNow_key項目 ProductNow_level

全て (条件なし) 0

大分類 1

中分類 2

小分類 3

商品 4

Check_key項目 Check_level

全て (条件なし) 0

支払 1

Age_key項目 Age_level

全て (条件なし) 0

年齢層 1

年齢帯 2

Seibetsu_key項目 Seibetsu_level

全て (条件なし) 0

性別 1

56

DML の作成および実行

手順 1~2 で作成した抽出条件を付加した DML を作成して、実行します。

T-SQL の実装例

Tips: 検索パフォーマンスを向上させるためのポイント

テーブル「SaleFact」は、カラム[年月日]をキー(パーティション キー)としてパーティ

ション分割されています。このようにパーティション分割されているテーブルで、パーティシ

ョン キーに対して抽出条件を指定して検索を行う場合は、オプティマイザに正しくパーティ

ショニングを判断させるための注意点があります。

パーティション キーを範囲指定する場合は、between よりも < >(=)を使用します。

-- sp_executesqlに渡す変数定義

SET @sSQL_PARAMDIF = N'@TblRegion nchar(),@TblBranch nchar(),'

+ N'@TimeFrom date,@TimeTo date,'

+ N'@Region nchar(),'

+ N'@Branch nchar(),'

+ N'@Store nchar(),'

+ N'@Area nvarchar(),'

+ N'@Pref nvarchar(),'

+ N'@Big nchar(),'

+ N'@Middle nchar(),'

+ N'@Small nchar(),'

+ N'@Product nchar(),'

+ N'@Check int,'

+ N'@Agroup nvarchar(),'

+ N'@Abelt nvarchar(),'

+ N'@Seibetsu nchar()';

IF @sSQL_WHERE <> ''

BEGIN

SET @sSQL = @sSQL + @sSQL_WHERE;

END;

EXECUTE sp_executesql @sSQL, @sSQL_PARAMDIF,

@TblRegion = @ChiikiCD,

@TblBranch = @ShitenCD,

@TimeFrom = @dtTimeFrom,

@TimeTo = @dtTimeTo,

@Region = @Store_key,

@Branch = @Store_key,

@Store = @Store_key,

@Area = @Address_key,

@Pref = @Address_key,

@Big = @ProductNow_key,

@MIddle = @ProductNow_key,

@Small = @ProductNow_key,

@Product = @ProductNow_key,

@Check = @Check_key,

@Agroup = @Age_key,

@Abelt = @Age_key,

@Seibetsu = @Seibetsu_key

;

57

パーティション キーでディメンションを結合し、ディメンションのカラムで検索すると、

パーティションによる検索を行いません。そのような場合は、まずディメンションを別ス

テップで参照して、パーティション キーに指定できる値を取得し、直接パーティション

キーへ値を指定して検索を行うように設定します。

SQL を文字列として実行する際の注意点

sp_executesql を使用するように設定します。

可変する WHERE 句の検索条件の値は必ずパラメータ化へ設定します。

上記は、いずれもキャッシュ ヒット率を向上させるためです。今回のようにテーブル結合が

多い場合は、コストが高くなると予想されるので、その場合はキャッシュにヒットする/しな

いでパフォーマンスに大きな差が現れます。

※ sp_executesql に関する詳細は、オンライン ブックの以下を参考にしてください。

http://msdn.microsoft.com/ja-jp/library/ms188001(SQL.100).aspx

58

4.Analysis Services アクセス制御の実装方法

4.1 ロールによるアクセス制御

Excel ピボット テーブルから Analysis Services に対するアクセス制御は、ロールの設定に

よって行います。

AD ありの場合

ドメイン アカウントに対するロールの設定

ドメイン アカウントを含むグローバル/ローカル グループで設定可能

AD なしの時

ローカル アカウントに対するロールの設定

ローカル アカウントを含むローカル グループで設定可能

使用したユーザーとグループ

今回の検証では、次のようにユーザーとグループを作成し、Analysis Services サーバーのロ

ーカル グループをロールのメンバーシップへ追加しました。

アクセス制御は、以下のように行います。

ローカル グループに対してアクセス制御を行う

直接ドメイン グループに対してアクセス制御を行うことも可能

Analysis Services サーバーのローカルグループ

ドメイングループ

ドメインユーザー

AD ありの場合

Analysis Services サーバーのローカルグループ

ローカルユーザー

AD なしの場合

59

4.2 Analysis Services アクセス制御の設定方法

Analysis Services アクセス制御の設定方法は、次のとおりです。

1. ロールを作成する

2. ロールのメンバシップへローカル グループを追加する

3. ディメンション データの設定で、設定したユーザーが使用できるディメンションの項目

を設定します。

設定手順

1. ロールを作成するには、ロールを右クリックして、[新しいロール]を選択します。

2. ロール名を入力します。

3. メンバシップを追加します。

60

4. オブジェクトの種類を選択します。

5. グループへチェックを入れます

6. 追加したいグループを入力して、[名前の確認]をクリックします。

7. グループが追加されました。

アクセス制御したいユーザー/グループを選択します

デフォルトでは、グループに

チェックが入っていないため、

チェックを入れないとグループを

登録することができません

61

8. そのほかの各ページは、次のように設定されています。

62

9. [ディメンション データ]ページへ移ります

10. アクセス制御したいディメンションを選択します。

設定したユーザーが使用できるディメンションの項目を設定します

63

11. アクセス制御したいディメンションを選択すると、ディメンション内の階層/属性がリス

トボックスへ表示され、選択した階層/属性のメンバの一覧が表示されます。

12. [すべてのメンバの選択を解除する]を選択します。

64

これにより、すべてのメンバのチェックが外れます。

13. [表示部分の合計を表示する]を選択します。

特定の属性だけを見せたい、という要件の場合、全てのメンバの選択を解除するようにしておかないと、ディメンション(階層)に新しい属性が加わった際に、その属性を使用できるようになってしまうため、ここですべてのメンバの選択を解除するようにしておきます。

こうしておくことで、新しく加わった属性を使用できないようにすることができます

65

作成したロールとロール メンバシップ

今回の検証では、以下のロールを作成し、各ロールのロール メンバシップへ下記のローカル

グループを追加しました。

以上

「表示部分の合計を表示する」 をチェックしておくことで、このディメンションを分析軸として使用していない場合にも選択した属性のみの集計が行われるようになります

作成したロールロールメンバシップへ追加したローカルグループ

神奈川地域担当 B_Group

千葉地域担当 D_Group

横浜本部担当 B01_Group

川崎支社担当 B02_Group

千葉中央支社担当 D01_Group

千葉エリア支社担当 D02_Group

全地域統括担当 Master_Group