ロール

適用対象: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

表形式モデルのロールは、モデルのメンバー権限を定義します。 ロールのメンバーは、ロール権限によって定義されたとおりにモデル上で各種操作を実行できます。 読み取り権限を付与して定義されたロールでは、行レベル フィルターを使用して行レベルでのセキュリティを向上させることもできます。

Azure Analysis Servicesと Power BI データセットの場合、ユーザーはMicrosoft Entra ID に含まれ、指定されたユーザー名とグループは組織の電子メール アドレスまたは UPN である必要があります。 SQL Server Analysis Servicesのロールには、Windows ユーザー名または Windows グループ別のユーザー メンバー、およびアクセス許可 (読み取り、プロセス、管理者) が含まれます。 Azure Analysis Servicesおよび Power BI セマンティック モデルの場合、ユーザーは Azure Active Directory に存在し、指定するユーザー名とグループは組織の電子メール アドレスまたは UPN である必要があります。 SQL Server Analysis Servicesのロールには、Windows ユーザー名または Windows グループ別のユーザー メンバー、およびアクセス許可 (読み取り、プロセス、管理者) が含まれます。

重要

Visual Studio を使用してロールを作成し、Azure Analysis Servicesまたは Power BI にデプロイされる表形式モデル プロジェクトに組織ユーザーを追加する場合は、統合ワークスペースを使用します。

重要

ユーザーがレポート クライアント アプリケーションを使用してデプロイされたモデルに接続するには、それらのユーザーがメンバーである読み取りアクセス許可を持つロールを少なくとも 1 つ作成する必要があります。

この記事の情報は、SSDT の [ロール マネージャー] ダイアログ ボックスを使用してロールを定義する表形式モデルの作成者向けです。 モデル作成時に定義されたロールは、モデル ワークスペース データベースに適用されます。 モデル データベースがデプロイされると、モデル データベース管理者は SSMS を使用してロール メンバーを管理 (追加、編集、削除) できます。

ロールについて

Analysis Services では、モデル データ アクセスを管理するためにロールが使用されます。 ロールには次の 2 種類があります。

  • サーバー ロール。Analysis Services サーバー インスタンスへの管理者アクセスを提供する固定ロールです。 サーバー ロールは Power BI には適用されません。 代わりに、Power BI では ワークスペース ロールが使用されます

  • データベース ロール。管理者以外のユーザーによるモデル データベースとデータへのアクセスを制限するために、モデル作成者と管理者によって定義されるロールです。

テーブル モデル向けに定義されているロールは、データベース ロールです。 つまり、ロールには、それらのメンバーがモデル データベースに対して実行できるアクションを定義する特定のアクセス許可を持つユーザーまたはグループで構成されるメンバーが含まれます。 ロールはデータベース内に個別のオブジェクトとして作成され、そのロールが作成されたデータベースにのみ適用されます。 ユーザーとグループは、モデル作成者によってロールに含まれます。既定では、ワークスペース データベース サーバーに対する管理者権限があります。管理者がデプロイしたモデルの場合は 。

表形式モデルのロールは、行 レベルセキュリティとも呼ばれる行フィルターを使用してさらに定義できます。 行フィルターでは、DAX 式を使用して、テーブル内の行とユーザーがクエリを実行できる多くの方向の関連行を定義します。 DAX 式を使用する行フィルターを定義できるのは、読み取りおよび読み取りと処理の権限に対してだけです。 Power BI では、モデル ロールは Power BI Desktop で定義され、行レベルのセキュリティにのみ適用されます。 詳細については、この記事の「 行フィルター 」を参照してください。

既定では、新しい表形式モデル プロジェクトを作成すると、プロジェクトにはロールがありません。 ロールは、SSDT の [ロール マネージャー] ダイアログ ボックスを使用して定義できます。 モデルを作成しているときにロールを定義すると、それらのロールはモデル ワークスペース データベースに適用されます。 モデルを配置すると、同じロールが配置済みモデルに適用されます。 モデルがデプロイされると、サーバー ロール ([Analysis Services 管理者] とデータベース管理者) のメンバーは、SSMS を使用して、モデルに関連付けられているロールと各ロールに関連付けられているメンバーを管理できます。

アクセス許可

このセクションで説明するロールのアクセス許可は、Azure Analysis ServicesとSQL Server Analysis Servicesにのみ適用されます。 Power BI では、セマンティック モデルに対するアクセス許可が定義されています。 詳細については、「 セマンティック モデルのアクセスの管理」を参照してください。

各ロールに定義済みデータベース権限が 1 つ存在します (読み取りと処理を組み合わせた権限を除きます)。 既定では、新しいロールの権限は [なし] です。 つまり、メンバーが権限のないロールに追加されると、別の権限が与えられるまで、データベースの変更、処理操作の実行、データの照会、およびデータベースの表示を行うことはできません。

グループまたはユーザーは、任意の数のロールのメンバーにすることができ、各ロールは異なるアクセス許可を持ちます。 ある 1 人のユーザーが、複数個のロールのメンバーである場合、各ロールに対して定義された権限は累積されます。 たとえば、あるユーザーが読み取り権限を持つロールのメンバーであると同時に、権限のないロールのメンバーでもある場合、そのユーザーは読み取り権限を持つことになります。

各ロールに対して、次のうちいずれかの権限を定義できます。

アクセス許可 説明 DAX を使用した行フィルター
なし メンバーは、モデルのデータベース スキーマを変更したり、データを照会したりすることはできません。 行フィルターは適用されません。 このロールのユーザーには、データは表示されません。
Read メンバーは、(行フィルターに基づいて) データに対してクエリを実行できますが、SSMS のモデル データベースを表示することはできず、モデルのデータベース スキーマを変更することはできません。また、ユーザーはモデルを処理できません。 行フィルターが適用されます。 行フィルター DAX 式で指定されたデータのみがユーザーに表示されます。
Read and Process (読み取りとプロセス) メンバーは、(行レベル フィルターに基づいて) データを照会でき、処理コマンドを埋め込んだパッケージまたはスクリプトを実行することで処理操作を実行できますが、データベースを変更することはできません。 SSMS でモデル データベースを表示できません。 行フィルターが適用されます。 行フィルター DAX 式で指定されたデータのみ照会できます。
Process メンバーは、処理コマンドを埋め込んだパッケージまたはスクリプトを実行することで、処理操作を実行できます。 モデルのデータベース スキーマを変更することはできません。 データを照会することはできません。 SSMS のモデル データベースに対してクエリを実行できません。 行フィルターは適用されません。 この役割ではデータを照会できません。
管理者 メンバーはモデル スキーマに変更を加え、モデル デザイナー、レポート クライアント、SSMS のすべてのデータに対してクエリを実行できます。 行フィルターは適用されません。 この役割ではすべてのデータを照会することはできません。

注意

読み取りと読み取りと処理のアクセス許可を持つメンバーは、行フィルターに基づいてデータに対してクエリを実行できますが、SSMS でモデル データベースを表示することはできません。 メンバーはモデル データベース スキーマを変更できず、モデルを処理できません。 ただし、SQL Server Analysis Services 2019 以前では、メンバーは DMV を使用してメジャー定義を決定できます。 SQL Server Analysis Services 2022 以降では、セキュリティを強化するために DMV へのアクセスをブロックします。

行フィルター

行フィルターは、一般に Power BI の行レベルのセキュリティと呼ばれ、特定のロールのメンバーがクエリを実行できるテーブル内の行を定義します。 行フィルターは、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]=2020

Transactions テーブルに対するこれらのアクセス許可の正味の効果は、顧客が米国にあり、製品カテゴリが自転車であり、年が 2020 であるデータの行に対してメンバーがクエリを実行できるということです。 ユーザーは、これらのアクセス許可を付与する別のロールのメンバーでない限り、米国外のトランザクション、または自転車ではないトランザクション、または 2020 年でないトランザクションに対してクエリを実行することはできません。

フィルター =FALSE() を使用して、テーブル全体のすべての行へのアクセスを拒否できます。

Power BI のモデル ロールの詳細については、「Power BI の 行レベルのセキュリティ」を参照してください。

動的なセキュリティ

動的セキュリティは、現在ログオンしているユーザーのユーザー名または接続文字列から返される CustomData プロパティに基づいて行レベルのセキュリティを定義する方法を提供します。 動的なセキュリティを実装するために、ユーザーのログイン値 (Windows ユーザー名) および特定の権限を定義できるフィールドを含むテーブルをモデルに含める必要があります。たとえば、ログイン ID (domain\username) と、各従業員の部署の値を含む dimEmployees テーブルなどです。

動的なセキュリティを実装する場合、DAX 式に次の関数を使用すると、現在ログオンしているユーザーの名前、または接続文字列の CustomData プロパティが返されます。

機能 説明
USERNAME 関数 (DAX) 現在ログオンしているユーザーの domain\username を返します。
CUSTOMDATA 関数 (DAX) 接続文字列の CustomData プロパティを返します。

LOOKUPVALUE 関数を使用すると、USERNAME 関数で返されるユーザー名または CustomData 関数で返される文字列と同じ Windows ユーザー名を含む列の値が返されます。 同じテーブルまたは関連テーブルの中で、LOOKUPVALUE で返された値と一致する値だけが照会されるように制限できます。

たとえば、次の式を使用します。

='dimDepartment'[DepartmentId]=LOOKUPVALUE('dimEmployees'[DepartmentId], 'dimEmployees'[LoginId], USERNAME(), 'dimEmployees'[LoginId], 'dimDepartment'[DepartmentId])

LOOKUPVALUE 関数は dimEmployees[DepartmentId] 列の値を返します。dimEmployees[LoginId] は現在ログオンしているユーザーの LoginID と同じで、USERNAME によって返され、dimEmployees[DepartmentId] の値は dimDepartment[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 営業/マーケティング

ロールのテスト

Visual Studio でモデル プロジェクトを作成する場合は、Excel で分析機能を使用して、定義したロールの有効性をテストできます。 モデル デザイナーで [モデル] メニューの [Excel で分析]をクリックすると、Excel が開く前に [資格情報とパースペクティブの選択] ダイアログ ボックスが表示されます。 このダイアログ ボックスでは、データ ソースとしてワークスペース モデルに接続するために使用する、現在のユーザー名、別のユーザー名、ロール、およびパースペクティブを指定できます。 詳細については、「 [Excel で分析]と同じコンピューター上に Excel がインストールされている必要があります。

スクリプト ロール

デプロイされたモデルとセマンティック モデルのロールは、 表形式モデル スクリプト言語 (TMSL) を使用して Roles オブジェクトを作成または変更することでスクリプト化できます。 TMSL スクリプトは、SSMS で、または Invoke-ASCmd PowerShell コマンドレットを使用して実行できます。

こちらもご覧ください

ロールの作成と管理
パースペクティブ
Excel で分析
USERNAME 関数 (DAX)
LOOKUPVALUE 関数 (DAX)
CUSTOMDATA 関数 (DAX)