次の方法で共有


役割

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

表形式モデルのロールは、モデルのメンバー権限を定義します。 ロールのメンバーは、ロールのアクセス許可で定義されているモデルに対してアクションを実行できます。 読み取りアクセス許可で定義されたロールは、行レベルのフィルターを使用して行レベルでセキュリティを強化することもできます。

Azure Analysis Services および Power BI セマンティック モデルの場合、ユーザーは Microsoft Entra ID に含まれる必要があります。 ユーザー名とグループは、組織の電子メール アドレスまたはユーザー プリンシパル名 (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 つの定義済みデータベース 権限があります (読み取りとプロセスの組み合わせのアクセス許可を除く)。 既定では、新しいロールには None アクセス許可があります。 None 権限を持つロールにメンバーが追加されると、別の権限が付与されていない限り、データベースの変更、プロセス操作の実行、データの照会、データベースの表示を行うことはできません。

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

各ロールには、次のアクセス許可を定義できます。

権限 形容 DAX を使用した行フィルター
何一つ メンバーは、モデル データベース スキーマに変更を加えることはできません。また、データのクエリを実行することもできません。 行フィルターは適用されません。 このロールのユーザーにデータが表示されない
読む メンバーは (行フィルターに基づいて) データのクエリを実行できますが、SSMS でモデル データベースを表示することも、モデル データベース スキーマを変更することも、ユーザーがモデルを処理することもできません。 行フィルターを適用できます。 行フィルター DAX 数式で指定されたデータのみがユーザーに表示されます。
読み取りと処理 メンバーは、(行レベルのフィルターに基づいて) データのクエリを実行し、プロセス コマンドを含むスクリプトまたはパッケージを実行してプロセス操作を実行できますが、データベースに変更を加えることはできません。 アクセス許可を持つユーザーは、SSMS でモデル データベースを表示できません。 行フィルターを適用できます。 行フィルター DAX 数式で指定されたデータのみを照会できます。
過程 メンバーは、プロセス コマンドを含むスクリプトまたはパッケージを実行することで、プロセス操作を実行できます。 メンバーは、モデル データベース スキーマを変更したり、データを照会したり、SSMS でモデル データベースに対してクエリを実行したりすることはできません。 行フィルターは適用されません。 このロールではデータを照会できません
管理者 メンバーは、モデル スキーマに変更を加え、モデル デザイナー、レポート クライアント、および SSMS 内のすべてのデータに対してクエリを実行できます。 行フィルターは適用されません。 このロールでは、すべてのデータに対してクエリを実行できます。

手記

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

行フィルター

Power BIの行レベルのセキュリティ とも呼ばれる行フィルターは、特定のロールのメンバーがクエリを実行できるテーブル内の行を定義します。 行フィルターは、DAX 数式を使用して、モデル内の各テーブルに対して定義されます。

行フィルターは、読み取り読み取りと処理の アクセス許可を持つロールに対してのみ定義できます。 既定では、特定のテーブルに対して行フィルターが定義されていない場合、クロスフィルターが別のテーブルから適用されない限り、読み取りまたは読み取りおよび処理のアクセス許可を持つロールのメンバーは、テーブル内のすべての行に対してクエリを実行できます。

特定のテーブルに対して行フィルターを定義した後、TRUE/FALSE 値に評価される DAX 数式は、その特定のロールのメンバーがクエリできる行を定義します。 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) 現在ログオンしているユーザーのドメイン\ユーザー名を返します。
CUSTOMDATA 関数 (DAX) の 接続文字列の CustomData プロパティを返します。

LOOKUPVALUE 関数を使用すると、Windows ユーザー名が USERNAME 関数によって返されるユーザー名と同じ列または CustomData 関数によって返される文字列の値を返すことができます。 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
褐色 ケビン Adventure-works\kevin0 マーケティング 7
ブラッドリー デビッド Adventure-works\david0 マーケティング 7
Dobney JoLynn Adventure-works\JoLynn0 生産 4
Baretto DeMattos ポーラ Adventure-works\Paula0 人的資源 2

dimDepartment を する

DepartmentId DepartmentName
1 企業
2 エグゼクティブ全般と管理
3 在庫管理
4 加工
5 品質保証
6 研究開発
7 販売とマーケティング

ロールのテスト

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

スクリプト ロール

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

関連項目

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

CUSTOMDATA 関数 (DAX)