このサンプルでは、PowerShell で Dataverse Web API を使用して列レベルのセキュリティ操作を実行する方法を示します。
[前提条件]
このサンプルを実行する前に、Dataverse PowerShell サンプルで使用される概念とパターンについて説明した次の記事をお読みください。
- PowerShell と Visual Studio Code を使用したクイック スタート Web API
- Dataverse Web API で PowerShell と Visual Studio Code を使用する
このサンプルでは、次のものが必要です。
Visual Studio Code。 Visual Studio Code のダウンロード
Visual Studio Code 用の PowerShell 拡張機能。 PowerShell for Visual Studio Code をインストールする
PowerShell 7.4 以降。 Windows、Linux、macOS に PowerShell をインストールする を参照します
Az PowerShell モジュール バージョン 11.1.0 以降。 Azure PowerShell をインストールする方法 を参照します
既存のインストールを最新バージョンに更新するには、
Update-Module -Name Az -Forceシステム管理者特権を使用した Dataverse へのアクセス。
基本ユーザー アクセス権を持つアプリケーション ユーザー アカウント。 このユーザーを作成する方法については、「 ユーザーの構成」セクション を参照してください。
このサンプルを実行する方法
サンプル リポジトリをダウンロードまたは複製して、ローカル コピーを用意します。
Visual Studio Code を使用して ColumnLevelSecurity フォルダー を開きます。
.envファイルで、プレースホルダーの値を置き換えます。# The environment this application will connect to. BASE_URL=https://<yourorg>.api.crm.dynamics.com/ # The application user application id CLIENT_ID=00001111-aaaa-2222-bbbb-3333cccc4444 # The application user secret CLIENT_SECRET=Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2 # The Entra tenant id TENANT_ID=aaaabbbb-0000-cccc-1111-dddd2222eeeeサンプルを実行する環境の URL に
BASE_URLを設定します。F5 を押してサンプルを実行します。
.vscode/launch.jsonファイルは、ColumnLevelSecurity.ps1ファイルを実行するように構成されています。
サンプルを実行すると、既定のブラウザーで環境ユーザー アカウントを選択し、パスワードを入力するように求められます。
このサンプルの概要
このサンプルでは、コードを使用した 列レベルのセキュリティで説明されている機能を示します。
- Dataverse 環境で保護できる列を検出する
- 現在セキュリティで保護されている列を検出する
- Dataverse 環境の列をセキュリティで保護する
- 選択したフィールドへの読み取りまたは書き込みアクセス権を個々のユーザーに付与する
- 個々のユーザーのセキュリティで保護されたフィールドへのアクセスを変更する
- 個々のユーザーの選択したフィールドへのアクセスを取り消す
- 特定のユーザー グループへの読み取りと書き込みのアクセスを提供する
- セキュリティで保護された列のマスクを有効にする
- セキュリティで保護された列のマスクされていない値を取得する
サンプル ファイル
このサンプルのコードは、次のファイルにあります。
| File | Description |
|---|---|
ColumnLevelSecurity.ps1 |
サンプルのフローを制御します。
Setup、Run、およびCleanup関数の定義が含まれており、最後にそれらを呼び出します。 |
Examples.ps1 |
列レベルのセキュリティ操作に関連する操作を示す 12 個の関数が含まれています。 |
Helpers.ps1 |
サンプルの設定と実行を管理するためにサンプルで使用される定数と関数が含まれています。 これらの関数は、このサンプルの焦点ではありません。 |
このサンプルは、エラーが発生したときに回復性を持つように設計されているため、前に失敗した場合にサンプルを再度実行できます。
このサンプルがどのように動作するか
このサンプルで説明されているシナリオを作成するために、サンプルは次の操作を実行します。
設定
このサンプルの Setup 関数は、次の操作を実行します。
ColumnLevelSecuritySamplePublisherのカスタマイズ プレフィックスが存在しない場合は、sampleという名前のソリューション パブリッシャーを作成します。パブリッシャーに関連付けられている
ColumnLevelSecuritySampleSolutionという名前のソリューションが存在しない場合は作成します。それ以降のすべてのソリューション対応項目は、このソリューションのコンテキストで作成されます。
存在しない場合は、
sample_Exampleという名前のテーブルを作成します。存在しない場合は、
sample_Exampleテーブルに 4 つの文字列列を作成します。テーブル スキーマ名は次のとおりです。
sample_Emailsample_GovernmentIdsample_TelephoneNumbersample_DateOfBirth
sample_Exampleテーブル内の既存のサンプル データを削除します。sample_Exampleテーブルの各列に情報を含む 3 行のサンプル データを追加します。列レベルのセキュリティ サンプル ロールという名前の新しい セキュリティ ロールを作成します。
sample_Exampleテーブルの権限をセキュリティ ロールに追加します。ユーザーをセキュリティ ロールに関連付けます。
サンプルの「グループへの列データをセキュリティで保護するアクセスの管理」セクションで使用される、Example Field Security Profile という名前のフィールド セキュリティ プロファイル レコードを作成します。
アプリケーション ユーザーをフィールド セキュリティ プロファイルに関連付けます。
キャッシュが作成された新しいオブジェクトに追いつくのを 30 秒待ちます。
実際の動作
このサンプルの Run 関数は、次の操作を実行します。
列に関する情報を取得する
-
Dump-ColumnSecurityInfo-Example関数を使用して、システム内のどの列をセキュリティで保護できるかに関するデータを含む CSV ファイルをダウンロードします。 -
Get-SecuredColumnList-Example関数を使用して、既にセキュリティで保護されている環境列の一覧を取得して表示します。
列をセキュリティで保護する
- アプリケーション ユーザーが、
sample_Exampleテーブル内のすべての列からデータを取得できることを示します。 -
Set-ColumnIsSecured-Example関数を使用して 4 つの列をセキュリティで保護する - アプリケーション ユーザーが、
sample_Exampleテーブルのセキュリティで保護された列からデータを取得できなくなったことを示します。
セキュリティで保護された列データへのアクセスを個人に許可する
-
Grant-ColumnAccess-Example関数を使用して、フィールド共有 (PrincipalObjectAttributeAccess) レコードを作成して、アプリケーション ユーザーに特定のレコード フィールド値への読み取りアクセス権を付与します。 - アプリケーション ユーザーが、
sample_Exampleテーブル内の特定のセキュリティで保護されたレコード フィールドからデータを取得できることを示します。 - アプリケーション ユーザーがセキュリティで保護された列にデータを書き込めないことを示します。
-
Modify-ColumnAccess-Example関数を使用して、特定のレコード フィールドへの書き込みアクセス権を付与します。 - アプリケーション ユーザーが特定のレコード フィールドにデータを書き込めるようになったことを示します。
-
Revoke-ColumnAccess-Example関数を使用して、アプリケーション ユーザーにセキュリティで保護された列へのアクセス権を付与したPrincipalObjectAttributeAccessレコードを削除します。
グループへのセキュリティで保護された列データへのアクセスを管理する
-
Setupで作成された例のフィールドセキュリティプロファイルレコードにフィールド権限を追加するために、フィールド権限 (FieldPermission) レコードを作成してください。 - アプリケーション ユーザーがフィールド権限レコードで指定されたセキュリティで保護された列のみを表示できることを示します。
- フィールド権限が有効になっていない特定のレコード フィールドにデータを書き込むアプリケーション ユーザーが許可されていないことを示します。
マスキング
- 既存のマスク ルールの ID 値を取得します。 新しい セキュリティで保護されたマスク列 (AttributeMaskingRule) レコードを 作成して、
sample_Exampleテーブルの列のマスク 規則を指定します。 - 前に作成した
canreadunmaskedレコードの列の値を更新します。 - キャッシュが作成された新しいオブジェクトに追いつくのを 30 秒待ちます。
- アプリケーション ユーザーがマスクされた値を持つデータを取得できることを示します。
-
GETを使用するときに、アプリケーション ユーザーがsample_examplesコレクションで要求を使用してマスクされていない値を取得し、複数のレコードを返すことができることを示します。 -
GETを使用するときに、アプリケーション ユーザーが単一レコードを取得する要求でマスクされていない値を取得できることを示します。
ソリューションのエクスポート
エクスポートしたソリューションを使用して、このサンプルの外部にあるサンプル構成の機能をテストします。
- すべての構成で作成されたソリューションをアンマネージド ソリューションとしてエクスポートします。
- すべての構成で作成されたソリューションをマネージド ソリューションとしてエクスポートする
クリーンアップ
このサンプルの静的 Cleanup 関数は、次の操作を実行します。
$DELETE_CREATED_OBJECTSのHelpers.ps1設定がtrueされると、Cleanup関数は、SetupまたはRun中に作成されたすべてのコンポーネントの削除を試みます。 目標は、環境を元の状態に戻することです。 アイテムを削除しない場合は、設定を falseに変更できます。