このサンプルでは、Dataverse SDK for .NET を使用して列レベルのセキュリティ操作を実行する方法を示します。
[前提条件]
- Microsoft Visual Studio 2022
- システム管理者特権を使用した Dataverse へのアクセス。
このサンプルを実行する方法
- サンプル リポジトリをダウンロードまたは複製して、ローカル コピーを用意します。
- 「 ユーザーの構成 」セクションの手順に従って、システム管理者ロールを持たない 2 つ目のアプリケーション ユーザー アカウントを作成します。
- /ColumnLevelSecurity/appsettings.json ファイルを編集して、システム管理者と 2 番目のアプリケーション ユーザーの両方に接続する Microsoft Dataverse インスタンスを指定する接続文字列を定義します。
- サンプル ソリューションを Visual Studio で開き、F5 キーを押してサンプルを実行します。
このサンプルの概要
このサンプルでは、コードを使用した 列レベルのセキュリティで説明されている機能を示します。
- Dataverse 環境で保護できる列を検出する
- 現在セキュリティで保護されている列を検出する
- Dataverse 環境の列をセキュリティで保護する
- 選択したフィールドへの読み取りまたは書き込みアクセス権を個々のユーザーに付与する
- 個々のユーザーのセキュリティで保護されたフィールドへのアクセスを変更する
- 個々のユーザーの選択したフィールドへのアクセスを取り消す
- 特定のユーザー グループへの読み取りと書き込みのアクセスを提供する
- セキュリティで保護された列のマスクを有効にする
- セキュリティで保護された列のマスクされていない値を取得する
サンプル ファイル
このサンプルのコードは、次のファイルにあります。
| File | Description |
|---|---|
Program.cs |
サンプルのフローを制御します。
Setup、Run、およびCleanupメソッドの定義を格納し、Main メソッドで呼び出します。 |
Examples.cs |
列レベルのセキュリティ操作に関連する操作を示すメソッドが含まれています。 |
Helpers.cs |
サンプルの設定と実行を管理するためにサンプルによって使用されるメソッドが含まれています。 これらのメソッドは、このサンプルの焦点ではありません。 |
このサンプルは、エラーが発生したときに回復性を持つように設計されているため、前に失敗した場合にサンプルを再度実行できます。
このサンプルがどのように動作するか
このサンプルで説明されているシナリオを作成するために、サンプルは次の操作を実行します。
設定
このサンプルの静的 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 メソッドは、次の操作を実行します。
列に関する情報を取得する
-
Examples.DumpColumnSecurityInfoメソッドを使用して、システム内のどの列をセキュリティで保護できるかに関するデータを含む CSV ファイルをダウンロードします。 -
Examples.GetSecuredColumnListメソッドを使用して、既にセキュリティで保護されている環境列の一覧を取得して表示します。
列をセキュリティで保護する
- アプリケーション ユーザーが、
sample_Exampleテーブル内のすべての列からデータを取得できることを示します。 -
Examples.SetColumnIsSecuredメソッドを使用して 4 つの列をセキュリティで保護する - アプリケーション ユーザーが、
sample_Exampleテーブルのセキュリティで保護された列からデータを取得できなくなったことを示します。
セキュリティで保護された列データへのアクセスを個人に許可する
-
Examples.GrantColumnAccessメソッドを使用して、フィールド共有 (PrincipalObjectAttributeAccess) レコードを作成して、アプリケーション ユーザーに特定のレコード フィールド値への読み取りアクセス権を付与します。 - アプリケーション ユーザーが、
sample_Exampleテーブル内の特定のセキュリティで保護されたレコード フィールドからデータを取得できることを示します。 - アプリケーション ユーザーがセキュリティで保護された列にデータを書き込めないことを示します。
-
Examples.ModifyColumnAccessメソッドを使用して、特定のレコード フィールドへの書き込みアクセスを許可します。 - アプリケーション ユーザーが特定のレコード フィールドにデータを書き込めるようになったことを示します。
-
Examples.RevokeColumnAccessメソッドを使用して、アプリケーション ユーザーにセキュリティで保護された列へのアクセス権を付与したPrincipalObjectAttributeAccessレコードを削除します。
グループへのセキュリティで保護された列データへのアクセスを管理する
-
で作成された
Setupレコードにフィールド権限を追加するために、フィールド権限 (FieldPermission) レコードを作成してください。 - アプリケーション ユーザーがフィールド権限レコードで指定されたセキュリティで保護された列のみを表示できることを示します。
- フィールド権限が有効になっていない特定のレコード フィールドにデータを書き込むアプリケーション ユーザーが許可されていないことを示します。
マスキング
- 既存のマスク ルールの ID 値を取得します。 新しい セキュリティで保護されたマスク列 (AttributeMaskingRule) レコードを 作成して、
sample_Exampleテーブルの列のマスク 規則を指定します。 - 前に作成した
canreadunmaskedレコードの列の値を更新します。 - キャッシュが作成された新しいオブジェクトに追いつくのを 30 秒待ちます。
- アプリケーション ユーザーがマスクされた値を持つデータを取得できることを示します。
- UnMaskedData オプション パラメーターを使用するときに、アプリケーション ユーザーが RetrieveMultipleRequest クラスでマスクされていない値を取得できることを示します。
- UnMaskedData オプション パラメーターを使用するときに、アプリケーション ユーザーが RetrieveRequest クラスでマスクされていない値を取得できることを示します。
ソリューションのエクスポート
エクスポートしたソリューションを使用して、このサンプルの外部にあるサンプル構成の機能をテストします。
- すべての構成で作成されたソリューションをアンマネージド ソリューションとしてエクスポートします。
- すべての構成で作成されたソリューションをマネージド ソリューションとしてエクスポートする
クリーンアップ
このサンプルの静的 Cleanup メソッドは、次の操作を実行します。
SampleSettings.DeleteCreatedObjectsのappsettings.json設定がtrueされると、Cleanupメソッドは、SetupまたはRun中に作成されたすべてのコンポーネントの削除を試みます。 目標は、環境を元の状態に戻することです。 アイテムを削除しない場合は、設定を falseに変更できます。