ロール (SSAS テーブル)
テーブル モデルでは、ロールはあるモデルのメンバー アクセス許可を定義します。 各ロールには、Windows ユーザー名または Windows グループ別のメンバー、および権限 (読み取り、処理、および管理者) があります。 ロールのメンバーは、ロール権限によって定義されたとおりにモデル上で各種操作を実行できます。 読み取り権限を付与して定義されたロールでは、行レベル フィルターを使用して行レベルでのセキュリティを向上させることもできます。
重要
ユーザーがレポート生成用またはデータ分析用のクライアント アプリケーションを使用して任意の配置済みモデルに接続できるようにするため、それらのユーザーがメンバーである、最低でも読み取り権限はあるロールを 1 つ以上作成する必要があります。
このトピックの情報は、SQL Server Data Tools (SSDT) の [ロール マネージャー] ダイアログ ボックスを使用してロールを定義する表形式モデルの作成者向けです。 モデル作成時に定義されたロールは、モデル ワークスペース データベースに適用されます。 モデル データベースがデプロイされると、モデル データベース管理者は、SQL Server Management Studioを使用してロール メンバーを管理 (追加、編集、削除) できます。 配置されたデータベースでロールのメンバーを管理する方法については、「 表形式モデル ロール (SSAS 表形式)」を参照してください。
表形式モデリング (Adventure Works チュートリアル) には、この機能の使用方法に関する追加情報とレッスンが含まれています。
このトピックのセクション:
ロールについて
ロールは、Analysis Services とデータのセキュリティを管理するために Microsoft SQL Server Analysis Servicesで使用されます。 Analysis Services には、次の 2 種類のロールがあります。
サーバー ロール。Analysis Services のインスタンスへの管理者アクセスを提供する固定ロールです。
データベース ロール。管理者以外のユーザーによるモデル データベースとデータへのアクセスを制限するために、モデル作成者と管理者によって定義されるロールです。
テーブル モデル向けに定義されているロールは、データベース ロールです。 つまり、このロールに含まれるメンバーは Windows ユーザーまたは Windows グループで構成され、これらのユーザーまたはグループは、このロールのメンバーがモデル データベースに対して実行できる操作が定義された特定の権限を持っています。 データベース ロールは、データベース内に個別のオブジェクトとして作成され、そのロールが作成されたデータベースにのみ適用されます。 Windows ユーザーまたは Windows グループあるいはその両方は、モデル作成者によりこのロールに組み込まれます。このモデル作成者には、既定ではワークスペース データベース サーバー上での管理者権限があります。これは、配置済みモデルを対象とし、管理者ごとに異なります。
テーブル モデルでのロールは、行フィルターでさらに定義できます。 行フィルターでは、DAX 式を使用して、テーブル内の行とユーザーがクエリを実行できる多くの方向の関連行を定義します。 DAX 式を使用する行フィルターを定義できるのは、読み取りおよび読み取りと処理の権限に対してだけです。 詳しくは、後の「 行フィルター 」をご覧ください。
既定では、テーブル モデル プロジェクトの新規作成時点では、モデル プロジェクトにロールはありません。 ロールは、SQL Server Data Toolsの [ロール マネージャー] ダイアログ ボックスを使用して定義できます。 モデルを作成しているときにロールを定義すると、それらのロールはモデル ワークスペース データベースに適用されます。 モデルを配置すると、同じロールが配置済みモデルに適用されます。 モデルがデプロイされると、サーバー ロール (Analysis Services 管理者) とデータベース管理者のメンバーは、SQL Server Management Studioを使用して、モデルに関連付けられているロールと各ロールに関連付けられているメンバーを管理できます。
注意
DirectQuery モード用に構成されたモデルのために定義されたロールでは、行フィルターを使用できません。ただし、各ロールに対して定義された権限は適用されます。
アクセス許可
各ロールに定義済みデータベース権限が 1 つ存在します (読み取りと処理を組み合わせた権限を除きます)。 既定では、新しいロールの権限は [なし] です。 つまり、メンバーが権限のないロールに追加されると、別の権限が与えられるまで、データベースの変更、処理操作の実行、データの照会、およびデータベースの表示を行うことはできません。
Windows グループまたは Windows ユーザーは、任意の数のロール (各ロールには異なる権限がある) のメンバーになることができます。 ある 1 人のユーザーが、複数個のロールのメンバーである場合、各ロールに対して定義された権限は累積されます。 たとえば、あるユーザーが読み取り権限を持つロールのメンバーであると同時に、権限のないロールのメンバーでもある場合、そのユーザーは読み取り権限を持つことになります。
各ロールに対して、次のうちいずれかの権限を定義できます。
アクセス許可 | 説明 | DAX を使用した行フィルター |
---|---|---|
なし | メンバーは、モデルのデータベース スキーマを変更したり、データを照会したりすることはできません。 | 行フィルターは適用されません。 このロールのユーザーには、データは表示されません。 |
Read | メンバーは、(行フィルターに基づいて) データに対してクエリを実行できますが、SSMS のモデル データベースを表示することはできず、モデルのデータベース スキーマを変更することはできません。また、ユーザーはモデルを処理できません。 | 行フィルターが適用されます。 行フィルター DAX 式で指定されたデータのみがユーザーに表示されます。 |
Read and Process (読み取りとプロセス) | メンバーは、(行レベル フィルターに基づいて) データを照会でき、処理コマンドを埋め込んだパッケージまたはスクリプトを実行することで処理操作を実行できますが、データベースを変更することはできません。 SQL Server Management Studioでモデル データベースを表示できません。 | 行フィルターが適用されます。 行フィルター DAX 式で指定されたデータのみ照会できます。 |
プロセス | メンバーは、処理コマンドを埋め込んだパッケージまたはスクリプトを実行することで、処理操作を実行できます。 モデルのデータベース スキーマを変更することはできません。 データを照会することはできません。 SQL Server Management Studioのモデル データベースに対してクエリを実行できません。 | 行フィルターは適用されません。 この役割ではデータを照会できません。 |
管理者 | メンバーはモデル スキーマに変更を加え、モデル デザイナー、レポート クライアント、およびSQL Server Management Studio内のすべてのデータに対してクエリを実行できます。 | 行フィルターは適用されません。 この役割ではすべてのデータを照会することはできません。 |
行フィルター
行フィルターは、特定のロールのメンバーがクエリできるテーブル内の行を定義します。 行フィルターは、DAX 式を使用してモデル内の各テーブルに対して定義されます。
行フィルターは、Read (読み取り) アクセス許可および Read and Process (読み取りとプロセス) アクセス許可を持つロールに対してのみ定義できます。 既定では、ある特定のテーブルに対して行フィルターが定義されていない場合、読み取り権限または読み取りと処理の権限を持つロールのメンバーは、別のテーブルからのクロスフィルター処理が適用されていない限り、テーブル内のすべての行を照会できます。
ある特定のテーブルに対して行フィルターが定義されると、DAX 式 (これは TRUE/FALSE 値に評価される必要がある) によりその特定のロールのメンバーが照会できる行が定義されます。 DAX 式に含まれていない行は照会できません。 たとえば、Sales ロールのメンバーの場合、次の行フィルター式を持つ Customers テーブル = Customers [Country] = "USA" (Sales ロールのメンバー) は、米国内の顧客のみを表示できます。
行フィルターは、指定行と関連行に適用されます。 テーブルに複数のリレーションシップがあるとき、アクティブなリレーションシップに対してフィルターによりセキュリティが適用されます。 行フィルターには、関連テーブルに対して定義された他の行フィルターと類似する点があります。次に例を示します。
テーブル | DAX 式 |
---|---|
リージョン | =Region[Country]="USA" |
ProductCategory | =ProductCategory[Name]="Bicycles" |
トランザクション | =Transactions[Year]=2008 |
Transactions テーブルに対するこれらの権限の実質的な影響は、顧客が米国内に存在し、製品カテゴリが自転車で、しかも年度が 2008 であるデータ行をメンバーが照会できることです。 メンバーは、顧客が米国外にいるか、製品が自転車でないか、または年度が 2008 年でないトランザクションは照会できません。ただし、これらの権限を付与された別のロールのメンバーである場合を除きます。
フィルター =FALSE() を使用して、テーブル全体のすべての行へのアクセスを拒否できます。
動的なセキュリティ
動的なセキュリティには、現在ログオンしているユーザーの名前、または接続文字列から返された CustomData プロパティに基づいて、行レベルのセキュリティを定義する方法が用意されています。 動的なセキュリティを実装するために、ユーザーのログイン値 (Windows ユーザー名) および特定の権限を定義できるフィールドを含むテーブルをモデルに含める必要があります。たとえば、ログイン ID (domain\username) と、各従業員の部署の値を含む dimEmployees テーブルなどです。
動的なセキュリティを実装する場合、DAX 式に次の関数を使用すると、現在ログオンしているユーザーの名前、または接続文字列の CustomData プロパティが返されます。
機能 | 説明 |
---|---|
USERNAME 関数 (DAX) | 現在ログオンしているユーザーの domain\username を返します。 |
CUSTOMDATA 関数 (DAX) | 接続文字列の CustomData プロパティを返します。 |
LOOKUPVALUE 関数を使用すると、USERNAME 関数で返されるユーザー名または CustomData 関数で返される文字列と同じ Windows ユーザー名を含む列の値が返されます。 同じテーブルまたは関連テーブルの中で、LOOKUPVALUE で返された値と一致する値だけが照会されるように制限できます。
たとえば、次の式を使用します。
='dimDepartmentGroup'[DepartmentGroupId]=LOOKUPVALUE('dimEmployees'[DepartmentGroupId], 'dimEmployees'[LoginId], USERNAME(), 'dimEmployees'[LoginId], 'dimDepartmentGroup'[DepartmentGroupId])
この LOOKUPVALUE 関数では、USERNAME で返される現在ログオンしているユーザーの LoginID と同じ dimEmployees[LoginId] を持つ dimEmployees[DepartmentId] 列の値が返されます。dimEmployees[DepartmentId] と dimDepartmentGroup[DepartmentId] の値は同じです。 次に、LOOKUPVALUE で返された DepartmentId の値を使用して、dimDepartment テーブル、および DepartmentId で関連付けられたすべてのテーブルで、クエリ対象の行を制限します。 LOOKUPVALUE 関数で返された DepartmentId の値にも含まれる DepartmentId を持つ行だけが返されます。
dimEmployees
LastName | FirstName | LoginID | DepartmentName | DepartmentId |
---|---|---|---|---|
Brown | Kevin | Adventure-works\kevin0 | マーケティング | 7 |
Bradley | David | Adventure-works\david0 | マーケティング | 7 |
Dobney | JoLynn | Adventure-works\JoLynn0 | Production | 4 |
Baretto DeMattos | Paula | Adventure-works\Paula0 | Human Resources | 2 |
dimDepartment
DepartmentId | DepartmentName |
---|---|
1 | 企業 |
2 | Executive General and Administration |
3 | Inventory Management |
4 | 製造 |
5 | 品質保証 |
6 | Research and Development |
7 | 営業/マーケティング |
ロールのテスト
モデル プロジェクトの作成時に、Excel で分析機能を使用して、定義したロールの有効性をテストできます。 モデル デザイナーで [モデル] メニューの [Excel で分析]をクリックすると、Excel が開く前に [資格情報とパースペクティブの選択] ダイアログ ボックスが表示されます。 このダイアログ ボックスでは、データ ソースとしてワークスペース モデルに接続するために使用する、現在のユーザー名、別のユーザー名、ロール、およびパースペクティブを指定できます。 詳細については、「 Excel で分析 (SSAS 表形式)」を参照してください。
Related Tasks
トピック | 説明 |
---|---|
ロールの作成および管理 (SSAS テーブル) | このトピックのタスクでは、 [ロール マネージャー] ダイアログ ボックスを使用して、ロールを作成し管理する方法について説明されています。 |
参照
パースペクティブ (SSAS テーブル)
Excel で分析 (SSAS テーブル)
USERNAME 関数 (DAX)
LOOKUPVALUE 関数 (DAX)
CUSTOMDATA 関数 (DAX)