1. 記事一覧 >
  2. ブログ記事
Dataverse
category logo

Dataverseに独自テーブルを作って自分で登録したレコードしか閲覧編集できないようにする

(更新) (公開)

はじめに

Microsoft Power Platform で共通して使用できるデータベース(のようなもので、ツール、サービスの一つ) Microsoft Dataverse (旧:Common Data Service) に独自テーブルを作成して、レコードを追加した本人のみが参照できるように設定しました。
今回、Power Apps に管理者でアクセスして、テーブル作成、列の追加から権限(セキュリティ ロール)設定手順、その結果どうなるかまでを紹介していきたいと思います。

この記事には、Microsoft Power Platformとは?Dataverseとは?Power Appsとは?の説明はありません。

この記事は、あくまで Dataverse の セキュリティ ロール についてのみの話です。Power Apps ポータル や Power Pages の Webロール のことはありません。

本記事情報の誤りにより何らかの問題が生じても、一切責任を負いません。

自己責任でお願いします。

通常は、今回の事例のように単純ではないと思います。

適切に権限が振り分けられているか、確認し、慎重に設定してください。

2022年10月現在の状況を元に説明しています。


概要

管理者、一般ユーザーA、Aと同等の権限の一般ユーザーB
のみが登場人物とします。


管理者:テーブル「いぬ」の全レコードが閲覧編集可能
一般ユーザーA:自分が追加したレコードのみ閲覧編集可能
一般ユーザーB:テーブルデータは何も見えない
の状況にします。

登場人物


一般ユーザーA、一般ユーザーB ともに、
・既定の一つの部(ルート部署)、既定の一つのチームに所属するのみ
・保持しているロールは Environment Maker、Basic User 2つのロール
とします。


操作する人は、システム管理者で、何でもできる人とします。


テーブル作成

管理者で Power Apps ホームhttps://make.powerapps.com/)にて、Dataverse を開いて、テーブル をクリックします。 Dataverseを開いて、テーブルをクリック


+ 新しいテーブル をクリックします。 + 新しいテーブル をクリック


「いぬ」テーブルを作成します。
表示名いぬ
複数形の名前いぬ
高度なオプション をクリックして、
スキーマ名dog
として、他はデフォルトのままとします。 「いぬ」テーブルを作成


プライマリ列 の方は、デフォルトで入力されている
表示名Name スキーマ名Name
列の要件必要なビジネス
のままとします。

プライマリ列

列の要件 のところは、以下の意味です。

必要なビジネス = 必須(何か入力されていないといけない)

推奨されるビジネス = 必須ではなく、空欄にできるが、なるべく入力しないといけない列

任意 = これはそのままの意味で、任意(空欄でもOK)


推奨されるビジネス ですが、モデル駆動型アプリで入力するときに青い+印が表示されます。

推奨されるビジネス モデル駆動型アプリで入力するときに青い+印

必要なビジネス のときは、赤い*印です。

必要なビジネス 赤い*印

新しい列追加のときに i マークをクリックすると、説明が表示されますが、これが選択肢の言葉と食い違っています。

i マークをクリック

プライマリ列=RDB でいうプライマリキーの意味ではないため、必須(必要なビジネス)ではなくて、任意にできますが、必ず存在しないといけない列になります。


保存 をクリックして、テーブルを作成します。


列 追加

+ 新規 から をクリックします。 + 新規 から 列をクリック


「誕生日」列を作成します。
表示名誕生日
データの種類日付と時刻
書式日付のみ
必須推奨されるビジネス
高度なオプション をクリックして、
スキーマ名birthday
として、他はデフォルトのままとし、保存 をクリックして、列を作成します。 「誕生日」列を作成


「誕生日」列が追加されています。
編集 をクリックして、レコードを追加します。

このままの画面でもレコード追加できますが、一応、編集画面に移ります。

編集 をクリックして、レコードを追加


「Name」列、「誕生日」列に入力していくと、リアルタイムで更新されます。2レコード追加しました。 2レコード追加


← 戻る で戻って、その他の 18 件 をクリック → 所有者 にチェックを入れて、保存 をクリックします。

所有者 にチェック


保存 をクリック後

非表示だった所有者の列が表示されます。所有者は、レコードを追加した人の名前が自動入力されています。


確認1

ここまでで、一般ユーザーA、一般ユーザーB ともにアクセス許可が全く無い状態です。(管理者は、先ほどの通り、閲覧編集可能です。) アクセス許可が全く無い状態

ここで、画面のメッセージに書かれていますが、この状態でも、列を調べる で、「Name」列、「誕生日」列が有ることくらいは分かります。


セキュリティロールの追加

「いぬ」テーブル専用のセキュリティ ロールを作成します。

ここで、作成する セキュリティ ロール は、作成したからといって、誰かに許可が与えられるものではありません。


管理者で Power Platform 管理センターhttps://admin.powerplatform.microsoft.com/)にて、環境 をクリックして、先ほど作成した「いぬ」テーブルがある環境をクリックします。 Power Platform 管理センター 環境


設定 をクリックします。 設定 をクリック


ユーザーとアクセス許可 をクリックし、セキュリティ ロール をクリックします。 ユーザーとアクセス許可 をクリック


新しいロール をクリックします。 新しいロール をクリック


ロール名Doggo(任意)
を入力し、ユーザー定義エンティティ をクリックします。 ユーザー定義エンティティ をクリック


「いぬ」テーブルの 作成 読み込み 書き込み 削除 追加 追加先 をクリックして、キー(有効範囲)をユーザー とします。設定したら、保存して閉じる をクリックします。 「いぬ」テーブルのキー設定

キーを部署以上に広げると、所有者と同じ部署の人のデータにも許可が与えられて、今回の場合、管理者、一般ユーザーA、一般ユーザーBが同じ部署前提のため、全員のデータが有効になります。


キーの違いについて、閲覧(読みこみ)できるできないに絞って、まとめると以下の状況になります。
ルート部署配下の部署所属の一般ユーザーCさんを登場させます。(この後の手順でロールの割り当てが出てきますが、各人に同じロールが割り当てられているものとします。)

ルート部署配下の部署所属の一般ユーザーCさん


キー:選択なし キー:選択なし

サインインユーザーレコード所有者状況
管理者*全て閲覧できる(他のロールが効いている)
一般ユーザーA*全て閲覧できない
一般ユーザーC*全て閲覧できない

キー:ユーザー キー:ユーザー

サインインユーザーレコード所有者状況
管理者*全て閲覧できる(他のロールが効いている)
一般ユーザーA管理者全て閲覧できない
一般ユーザーA一般ユーザーA閲覧できる
一般ユーザーA一般ユーザーC閲覧できない
一般ユーザーC管理者閲覧できない
一般ユーザーC一般ユーザーA閲覧できない
一般ユーザーC一般ユーザーC閲覧できる

キー:部署 キー:部署

サインインユーザーレコード所有者状況
管理者*全て閲覧できる(他のロールが効いている)
一般ユーザーA管理者閲覧できる
一般ユーザーA一般ユーザーA閲覧できる
一般ユーザーA一般ユーザーC閲覧できない
一般ユーザーC管理者閲覧できない
一般ユーザーC一般ユーザーA閲覧できない
一般ユーザーC一般ユーザーC閲覧できる


一般ユーザーAは一般ユーザーCの上位部署に所属しますが、閲覧できません。


キー:部署配下 キー:部署配下

サインインユーザーレコード所有者状況
管理者*全て閲覧できる(他のロールが効いている)
一般ユーザーA管理者閲覧できる
一般ユーザーA一般ユーザーA閲覧できる
一般ユーザーA一般ユーザーC閲覧できる
一般ユーザーC管理者閲覧できない
一般ユーザーC一般ユーザーA閲覧できない
一般ユーザーC一般ユーザーC閲覧できる

キー:組織全体 キー:組織全体

サインインユーザーレコード所有者状況
管理者*全て閲覧できる(他のロールが効いている)
一般ユーザーA管理者閲覧できる
一般ユーザーA一般ユーザーA閲覧できる
一般ユーザーA一般ユーザーC閲覧できる
一般ユーザーC管理者閲覧できる
一般ユーザーC一般ユーザーA閲覧できる
一般ユーザーC一般ユーザーC閲覧できる


ここで初めて、一般ユーザーCが管理者、一般ユーザーA(Bも)が所有者のレコードが閲覧できます。


作成 追加 追加先 有り無しについて、違いが分かりにくかったので、探ってみました。
以下の挙動になりました。実は、追加 は不要でした。(この後の手順で出てきますが、ロールを割り当てたユーザーで確認しました。)

作成追加追加先状況
Dataverse:入力するところが無い。+新しい行が無効。
モデル駆動型アプリ:+新規が表示されない。
Dataverse:入力するところが無い。+新しい行が無効。
モデル駆動型アプリ:+新規 → フォームからレコード追加できる。
Dataverse:入力するところが無い。+新しい行が無効。
モデル駆動型アプリ:+新規が表示されない。
Dataverse:入力するところが有る。+新しい行が有効。レコードの保存に失敗する。
モデル駆動型アプリ:+新規が表示されない。
Dataverse:入力するところが無い。+新しい行が無効。
モデル駆動型アプリ:+新規 → フォームからレコード追加できる。
Dataverse:入力するところが有る。+新しい行が有効。レコードを保存できる。
モデル駆動型アプリ:+新規 → フォームからレコード追加できる。
Dataverse:入力するところが有る。+新しい行が有効。レコードの保存に失敗する。
モデル駆動型アプリ:+新規が表示されない。
Dataverse:入力するところが有る。+新しい行が有効。レコードを保存できる。
モデル駆動型アプリ:+新規 → フォームからレコード追加できる。

あくまで今回の場合です。追加追加先は、本来他のレコードとの紐付けに関係します。

ロールの設定は、"累積的" です。つまり、一般ユーザーAがより広い範囲(or より権限が強い)のロール(アクセス許可)を既に持っていた場合、そちらが優先されます。


セキュリティロールの割り当て

設定に戻って、 ユーザーとアクセス許可 から ユーザー をクリックします。 ユーザーとアクセス許可 から ユーザー をクリック


セキュリティロールを割り当てるユーザーの名前をクリックします。 セキュリティロールを割り当てるユーザーの名前をクリック


ロールを管理する をクリックします。 ロールを管理する をクリック


先ほど追加したロール Doggo を選択して、保存 をクリックします。 ロール Doggo を選択 保存 をクリック


保存 をクリック後


セキュリティロール割り当てヨシ!


確認2

セキュリティロール "Doggo" が割り当てられた一般ユーザーAは、レコードを新規追加できて、自分のレコードだけ閲覧編集可能になっています。レコードの所有者は、一般ユーザーAになります。 自分のレコードだけ閲覧編集可能


一般ユーザーB は、セキュリティロールを割り当てていないため、相変わらず、アクセス許可が全く無い状態です。 アクセス許可が全く無い状態


管理者は、依然として、全データ閲覧編集可能ですので、一般ユーザーAのレコードも閲覧編集可能です。

管理者は、依然として、全データ閲覧編集可能


ちなみに、これは、モデル駆動型アプリ(https://********.crm*.dynamics.com/main.aspx?appid=<アプリID>)でも同じ状況になります。


一般ユーザーA でモデル駆動型アプリにアクセス

一般ユーザーA でモデル駆動型アプリにアクセス

Dataverse - テーブル - いぬ - データ エクスペリエンス で、
ビューを変更していないから、一覧表示は、Name(プライマリ列)、作成日 です。
フォームも変更していないから、+新規で入力可能なのは、Name(プライマリ列)のみです。


一般ユーザーB でモデル駆動型アプリにアクセス

一般ユーザーB でモデル駆動型アプリにアクセス


ヨシ!


loading...