次の方法で共有


サンプル: Dataverse Web API を使用した列レベルのセキュリティ (PowerShell)

このサンプルでは、PowerShell で Dataverse Web API を使用して列レベルのセキュリティ操作を実行する方法を示します。

[前提条件]

このサンプルを実行する前に、Dataverse PowerShell サンプルで使用される概念とパターンについて説明した次の記事をお読みください。

このサンプルでは、次のものが必要です。

このサンプルを実行する方法

  1. サンプル リポジトリをダウンロードまたは複製して、ローカル コピーを用意します。

  2. Visual Studio Code を使用して ColumnLevelSecurity フォルダー を開きます。

  3. .env ファイルにあるデータを使用して、という名前のファイルを作成します。

  4. .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
    
  5. サンプルを実行する環境の URL に BASE_URL を設定します。

  6. CLIENT_IDCLIENT_SECRETの値を設定する手順については、「TENANT_IDを参照してください。

  7. F5 を押してサンプルを実行します。 .vscode/launch.json ファイルは、ColumnLevelSecurity.ps1 ファイルを実行するように構成されています。

サンプルを実行すると、既定のブラウザーで環境ユーザー アカウントを選択し、パスワードを入力するように求められます。

このサンプルの概要

このサンプルでは、コードを使用した 列レベルのセキュリティで説明されている機能を示します。

  • Dataverse 環境で保護できる列を検出する
  • 現在セキュリティで保護されている列を検出する
  • Dataverse 環境の列をセキュリティで保護する
  • 選択したフィールドへの読み取りまたは書き込みアクセス権を個々のユーザーに付与する
  • 個々のユーザーのセキュリティで保護されたフィールドへのアクセスを変更する
  • 個々のユーザーの選択したフィールドへのアクセスを取り消す
  • 特定のユーザー グループへの読み取りと書き込みのアクセスを提供する
  • セキュリティで保護された列のマスクを有効にする
  • セキュリティで保護された列のマスクされていない値を取得する

サンプル ファイル

このサンプルのコードは、次のファイルにあります。

File Description
ColumnLevelSecurity.ps1 サンプルのフローを制御します。 SetupRun、およびCleanup関数の定義が含まれており、最後にそれらを呼び出します。
Examples.ps1 列レベルのセキュリティ操作に関連する操作を示す 12 個の関数が含まれています。
Helpers.ps1 サンプルの設定と実行を管理するためにサンプルで使用される定数と関数が含まれています。 これらの関数は、このサンプルの焦点ではありません。

このサンプルは、エラーが発生したときに回復性を持つように設計されているため、前に失敗した場合にサンプルを再度実行できます。

このサンプルがどのように動作するか

このサンプルで説明されているシナリオを作成するために、サンプルは次の操作を実行します。

設定

このサンプルの Setup 関数は、次の操作を実行します。

  1. ColumnLevelSecuritySamplePublisherのカスタマイズ プレフィックスが存在しない場合は、sampleという名前のソリューション パブリッシャーを作成します。

  2. パブリッシャーに関連付けられている ColumnLevelSecuritySampleSolution という名前のソリューションが存在しない場合は作成します。

    それ以降のすべてのソリューション対応項目は、このソリューションのコンテキストで作成されます。

  3. 存在しない場合は、 sample_Example という名前のテーブルを作成します。

  4. 存在しない場合は、 sample_Example テーブルに 4 つの文字列列を作成します。

    テーブル スキーマ名は次のとおりです。

    • sample_Email
    • sample_GovernmentId
    • sample_TelephoneNumber
    • sample_DateOfBirth
  5. sample_Example テーブル内の既存のサンプル データを削除します。

  6. sample_Example テーブルの各列に情報を含む 3 行のサンプル データを追加します。

  7. 列レベルのセキュリティ サンプル ロールという名前の新しい セキュリティ ロールを作成します

  8. sample_Example テーブルの権限をセキュリティ ロールに追加します。

  9. ユーザーをセキュリティ ロールに関連付けます。

  10. サンプルの「グループへの列データをセキュリティで保護するアクセスの管理」セクションで使用される、Example Field Security Profile という名前のフィールド セキュリティ プロファイル レコードを作成します。

  11. アプリケーション ユーザーをフィールド セキュリティ プロファイルに関連付けます。

  12. キャッシュが作成された新しいオブジェクトに追いつくのを 30 秒待ちます。

実際の動作

このサンプルの Run 関数は、次の操作を実行します。

列に関する情報を取得する

  1. Dump-ColumnSecurityInfo-Example関数を使用して、システム内のどの列をセキュリティで保護できるかに関するデータを含む CSV ファイルをダウンロードします。
  2. Get-SecuredColumnList-Example関数を使用して、既にセキュリティで保護されている環境列の一覧を取得して表示します。

列をセキュリティで保護する

  1. アプリケーション ユーザーが、 sample_Example テーブル内のすべての列からデータを取得できることを示します。
  2. Set-ColumnIsSecured-Example関数を使用して 4 つの列をセキュリティで保護する
  3. アプリケーション ユーザーが、 sample_Example テーブルのセキュリティで保護された列からデータを取得できなくなったことを示します。

セキュリティで保護された列データへのアクセスを個人に許可する

  1. Grant-ColumnAccess-Example関数を使用して、フィールド共有 (PrincipalObjectAttributeAccess) レコードを作成して、アプリケーション ユーザーに特定のレコード フィールド値への読み取りアクセス権を付与します。
  2. アプリケーション ユーザーが、 sample_Example テーブル内の特定のセキュリティで保護されたレコード フィールドからデータを取得できることを示します。
  3. アプリケーション ユーザーがセキュリティで保護された列にデータを書き込めないことを示します。
  4. Modify-ColumnAccess-Example関数を使用して、特定のレコード フィールドへの書き込みアクセス権を付与します。
  5. アプリケーション ユーザーが特定のレコード フィールドにデータを書き込めるようになったことを示します。
  6. Revoke-ColumnAccess-Example関数を使用して、アプリケーション ユーザーにセキュリティで保護された列へのアクセス権を付与したPrincipalObjectAttributeAccess レコードを削除します。

グループへのセキュリティで保護された列データへのアクセスを管理する

  1. Setupで作成された例のフィールドセキュリティプロファイルレコードにフィールド権限を追加するために、フィールド権限 (FieldPermission) レコードを作成してください。
  2. アプリケーション ユーザーがフィールド権限レコードで指定されたセキュリティで保護された列のみを表示できることを示します。
  3. フィールド権限が有効になっていない特定のレコード フィールドにデータを書き込むアプリケーション ユーザーが許可されていないことを示します。

マスキング

  1. 既存のマスク ルールの ID 値を取得します。 新しい セキュリティで保護されたマスク列 (AttributeMaskingRule) レコードを 作成して、 sample_Example テーブルの列のマスク 規則を指定します。
  2. 前に作成した canreadunmasked レコードの列の値を更新します。
  3. キャッシュが作成された新しいオブジェクトに追いつくのを 30 秒待ちます。
  4. アプリケーション ユーザーがマスクされた値を持つデータを取得できることを示します。
  5. GETを使用するときに、アプリケーション ユーザーが sample_examples コレクションで要求を使用してマスクされていない値を取得し、複数のレコードを返すことができることを示します。
  6. GETを使用するときに、アプリケーション ユーザーが単一レコードを取得する要求でマスクされていない値を取得できることを示します。

ソリューションのエクスポート

エクスポートしたソリューションを使用して、このサンプルの外部にあるサンプル構成の機能をテストします。

  1. すべての構成で作成されたソリューションをアンマネージド ソリューションとしてエクスポートします。
  2. すべての構成で作成されたソリューションをマネージド ソリューションとしてエクスポートする

クリーンアップ

このサンプルの静的 Cleanup 関数は、次の操作を実行します。

$DELETE_CREATED_OBJECTSHelpers.ps1設定がtrueされると、Cleanup関数は、SetupまたはRun中に作成されたすべてのコンポーネントの削除を試みます。 目標は、環境を元の状態に戻することです。 アイテムを削除しない場合は、設定を falseに変更できます。

サンプル: Dataverse SDK for .NET を使用した列レベルのセキュリティ