監査済みデータの変更履歴を取得する
監査が有効で、監査済みのテーブルや列が変更された場合は、そのテーブルと列の変更履歴を取得できます。
Dataverse TDS (SQL) エンドポイント を使用した監査データは利用できません。
監査履歴は、モバイル アプリのテーブルではご利用いただけません。
Audit テーブル
監査イベントは、監査 (Audit) テーブル に保存されています。 Web API では、監査 EntityType がこのデータのリソースです。 オブジェクト テーブルは読み取り専用です。
監査テーブルでは、Power Platform 管理センターに表示される 監査概要の表示 のデータを提供します。
テーブルからデータを取得するには、呼び出し元ユーザーに、prvReadAuditSummary
権限があることを確認してください。
次の表は、監査テーブルの重要な列をまとめたものです。
スキーマ名 LogicalName 表示名 |
タイプ | Description |
---|---|---|
Action action イベント |
選択肢 | 変更の原因となったイベントを表します。 アクションに関する詳細。 |
AttributeMask attributemask 変更されたフィールド |
メモ | 変更がレコード データへの変更を表す場合、変更された列の AttributeMetadata.ColumnNumber に対応するコンマで区切られた番号の一覧が含まれます。 注: このデータは使用しません。 代わりに、メッセージを使用して 変更履歴を取得します。 |
AuditId auditid レコード ID |
一意識別子 | 監査テーブルの主キーを識別する。 |
CallingUserId callinguserid 呼び出し元ユーザー |
参照 | 操作に偽装が使用されている場合の呼び出し元ユーザーを識別し、その他の場合は null 値にします。 |
CreatedOn createdon 変更日 |
DateTime | 監査レコードが作成されたとき、つまりユーザー操作が行われたときを識別します。 |
ObjectId objectid レコード |
参照 | 監査されたレコードを一意に識別します。 |
ObjectTypeCode objecttypecode Entity |
EntityName | objectid 列ごとに参照されるテーブルの論理名を表示します。 |
Operation operation 操作 |
選択肢 | 監査レコードを作成した操作を識別します (以下の 4 つの値のいずれか)。 1 = 作成 2 = 更新 3 = 削除 4 = アクセス |
UserId userid 変更者 |
参照 | データを変更したユーザーの ID を表示します。 |
監査アクション
アクションの選択肢/オプション を使用して、特定のイベントをフィルター処理します。 次のテーブルは、イベントを分類します。
テーブル行イベント
これらのイベントは、レコードへの変更をキャプチャします。
値 | ラベル | メッセージ | 説明 |
---|---|---|---|
1 | 作成 | Create |
レコードが作成されます。 |
2 | 更新 | Update |
レコードが更新されます。 |
3 | 削除 | Delete |
レコードが削除されます。 |
12 | マージ | Merge |
レコードが別のレコードと結合されます。 |
13 | 割り当て | Assign |
ユーザー所有のテーブル レコードの ownerid 列の値が変更されました。 |
41 | 状態の設定 | SetState |
レコードの statecode 列の値が変更されました。 |
レコードの共有イベント
これらのイベントは、レコードの共有時にレコード アクセスへの変更をキャプチャします。
値 | ラベル | メッセージ | 説明 |
---|---|---|---|
14 | 共有 | GrantAccess |
ユーザーには、レコードに対する特権が付与されます。 |
48 | 共有の修正 | ModifyAccess |
ユーザーに付与される特権が変更されました。 |
49 | 共有の解除 | RevokeAccess |
レコードに対するユーザーのアクセス権が削除されます。 |
多対多の関連付けイベント
これらのイベントは、多対多の関連付けの変更をキャプチャします。
価値 | Label | Message | Description |
---|---|---|---|
33 | エンティティの関連付け | Associate |
1 つ以上のレコードが別のレコードに関連付けられています。 |
34 | エンティティの関連付けの解除 | Disassociate |
1 つ以上のレコードが別のレコードから関連付け解除されています。 |
53 | チームへのロールの割り当て | Associate |
チームにセキュリティ ロールが割り当てられます。 |
54 | チームからロールを削除 | Disassociate |
チームからセキュリティ ロールが削除されます。 |
55 | ユーザーへのロールの割り当て | Associate |
ユーザーにセキュリティ ロールが割り当てられます。 |
56 | ユーザーからロールを削除 | Disassociate |
ユーザーからセキュリティ ロールが削除されます。 |
ユーザー アクセス イベント
これらのオプションは、ユーザー アクセス監査が有効な場合に、ユーザー アクセスの履歴をキャプチャするために使用されます。 これらのイベントの監査レコードには、4 の operation
列値があります。
価値 | Label | Description |
---|---|---|
64 | Web 経由のユーザー アクセス | ユーザーはモデル駆動型アプリを使用して Dataverse にアクセスしています。 |
65 | Web サービス経由のユーザー アクセス | ユーザーは、モデル駆動型アプリ以外のクライアントで Web サービスを使用して Dataverse にアクセスしています。 |
112 | ユーザー アクセス監査の開始 | ユーザー アクセス監査が始まりました。 |
113 | ユーザー アクセス監査の停止 | ユーザー アクセス監査が停止しました。 |
サンプル: ユーザー アクセスの監査 では、アクション オプションを使用してユーザー アクセスを監査する方法を説明します。
メタデータ変更イベント
これらのイベントは、組織テーブルへの変更だけでなく、テーブルと列の定義への変更もキャプチャします。
値 | ラベル | 説明 |
---|---|---|
100 | エンティティの削除 | ユーザーがテーブルを削除しました。 |
101 | 属性の削除 | ユーザーが列を削除しました。 |
102 | エンティティ レベルで変更を監査 | ユーザーがテーブル定義を変更して、監査を有効または無効にしました。 |
103 | 属性レベルで変更を監査 | ユーザーが列定義を変更して、監査を有効または無効にしました。 |
104 | 組織レベルで変更を監査 | ユーザーが組織設定を変更しました。 |
監査変更イベント
これらのイベントは、監査設定への変更をキャプチャします。
価値 | Label | Description |
---|---|---|
105 | エンティティ監査の開始 | 監査がテーブルに対して有効化されました。 |
106 | 属性監査の開始 | 監査が列に対して有効化されました。 |
107 | 監査の有効化 | 組織に対する監査が有効になりました。 |
108 | エンティティ監査の停止 | 監査がテーブルに対して無効化されました。 |
109 | 属性監査の停止 | 監査が属性に対して無効化されました。 |
110 | 監査の無効化 | 監査が列に対して無効化されました。 |
111 | 監査ログの削除 | 監査ログが削除されました。 |
セキュリティ ロール変更イベント
これらのイベントは、セキュリティ ロールへの変更をキャプチャします。
価値 | Label | Message | Description |
---|---|---|---|
57 | ロールに特権を追加 | AddPrivilegesRole |
ロールに特権が追加されました。 |
58 | ロールから特権を削除 | RemovePrivilegeRole |
ロールから特権が削除されました。 |
59 | ロールの特権を置き換え | ReplacePrivilegesRole |
ロールの特権が置き換えられました。 |
その他の処理
残りのアクション オプションは、通常、Dynamics 365 Sales、Customer Service、Marketing などの特定のソリューションに適用される監査可能な操作について言及されます。
これらのアクションのラベルは、アクションを表す SdkMessage.Name 値に合わせる必要があります。 特定の操作は、アクション名とテーブルの組み合わせである可能性があります。 たとえば、値が 10 でラベル 閉じる が付いたオプションは、CloseIncident
または CloseQuote
メッセージに対応する必要があります。
監査テーブルの関連付け
監査テーブルには、systemuser
テーブルを使用する多対一の関連付けが 2 つだけあります。
Relationship | Audit テーブル ルックアップ | 説明 |
---|---|---|
lk_audit_userid |
userid |
ユーザーが加えた変更により作成されたすべての監査レコードにユーザーを関連付けます。 |
lk_audit_callinguserid |
callinguserid |
別のユーザーに偽装している間作成した監査レコードのいずれかにユーザーを関連付けます。 |
これらの関連付けを使用して、特定のユーザー用に作成された監査データ レコードをフィルタリングできます。
監査エンティティは、クエリで 1 つのリンク エンティティのみをサポートします。 systemuser
テーブルを使用する 2 つの関連付けしかないため、callinguserid
または userid
列のいずれかからデータを含めることができますが、同時に両方を含めることはできないことを意味します。
QueryExpression または FetchXml を使用して、systemuser
テーブルに存在する 2 つの正式な関連付け以外のテーブルと監査データを結合するクエリを構築することはできません。
監査 EntityType の定義
Web API では、監査 EntityType リソースを使用して監査テーブルからデータを読み取ります。 以下のデータは、Web API CSDL $metadata サービス ドキュメント の監査 EntityType 定義です (注釈は含まれていません)。
<EntityType Name="audit" BaseType="mscrm.crmbaseentity">
<Key>
<PropertyRef Name="auditid" />
</Key>
<Property Name="operation" Type="Edm.Int32" />
<Property Name="attributemask" Type="Edm.String" Unicode="false" />
<Property Name="action" Type="Edm.Int32" />
<Property Name="useradditionalinfo" Type="Edm.String" Unicode="false" />
<Property Name="createdon" Type="Edm.DateTimeOffset" />
<Property Name="objecttypecode" Type="Edm.String" Unicode="false" />
<Property Name="_callinguserid_value" Type="Edm.Guid" />
<Property Name="_regardingobjectid_value" Type="Edm.Guid" />
<Property Name="_objectid_value" Type="Edm.Guid" />
<Property Name="_userid_value" Type="Edm.Guid" />
<Property Name="transactionid" Type="Edm.Guid" />
<Property Name="auditid" Type="Edm.Guid" />
<NavigationProperty Name="callinguserid" Type="mscrm.systemuser"
Nullable="false" Partner="lk_audit_callinguserid">
<ReferentialConstraint Property="_callinguserid_value"
ReferencedProperty="systemuserid" />
</NavigationProperty>
<NavigationProperty Name="userid" Type="mscrm.systemuser"
Nullable="false" Partner="lk_audit_userid">
<ReferentialConstraint Property="_userid_value"
ReferencedProperty="systemuserid" />
</NavigationProperty>
</EntityType>
注意
ChangeData 列 は、Web API 監査 EntityType に含まれていません。 このデータは使用しません。 代わりに、メッセージを使用して 監査変更履歴を取得します。
例: ユーザーが削除した取引先担当者レコードを検索する
次の例は、特定のユーザーによって削除された取引先担当者レコードの監査履歴を示すクエリです。
次のクエリは、両方とも同じ応答を返します。
次のクエリは、監査レコードの _userid_value
プロパティで値が <user id>
に一致する場合にフィルター処理を行います。
要求:
GET [Organization URI]/api/data/v9.2/audits?$select=_objectid_value,objecttypecode,createdon,_userid_value&$orderby=createdon desc&$filter=operation eq 3 and objecttypecode eq 'contact' and _userid_value eq '<user id>'
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Prefer: odata.include-annotations="*"
次のクエリでは、lk_audit_userid
コレクション値のナビゲーション プロパティを使用して、systemuserid
値が <user id>
に一致する systemuser
テーブルから特定のユーザーの監査レコードのコレクションにアクセスします
要求:
GET [Organization URI]/api/data/v9.2/systemusers(<user id>)/lk_audit_userid?$select=_objectid_value,objecttypecode,createdon,_userid_value&$orderby=createdon desc&$filter=operation eq 3 and objecttypecode eq 'contact'
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Prefer: odata.include-annotations="*"
応答:
HTTP/1.1 200 OK
Preference-Applied: odata.include-annotations="*"
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#audits(_objectid_value,objecttypecode,createdon,_userid_value)",
"@Microsoft.Dynamics.CRM.totalrecordcount": -1,
"@Microsoft.Dynamics.CRM.totalrecordcountlimitexceeded": false,
"value": [
{
"_objectid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "contact",
"_objectid_value": "0e76dc8a-41b5-ec11-983f-0022482bf046",
"objecttypecode@OData.Community.Display.V1.FormattedValue": "Contact",
"objecttypecode": "contact",
"createdon@OData.Community.Display.V1.FormattedValue": "5/12/2022 3:19 PM",
"createdon": "2022-05-12T22:19:12Z",
"_userid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "systemuser",
"_userid_value@OData.Community.Display.V1.FormattedValue": "FirstName LastName",
"_userid_value": "4026be43-6b69-e111-8f65-78e7d1620f5e"
},
< Other results truncated for brevity>
]
}
監査の変更履歴を取得する
3 つのメッセージを使用して、監査されたデータ変更を取得することができます。
Web API | .NET 用 SDK | Description |
---|---|---|
RetrieveAuditDetails 関数 | RetrieveAuditDetailsRequest クラス | 監査レコードから完全な監査の詳細を取得します。 |
RetrieveAttributeChangeHistory 関数 | RetrieveAttributeChangeHistoryRequest クラス | 監査済みレコードの単一の列に対する変更履歴を取得します。 |
RetrieveRecordChangeHistory 関数 | RetrieveRecordChangeHistoryRequest クラス | 特定のレコードに対するすべての監査済みデータの変更を取得します。 |
これらのメッセージを使用するには、prvReadRecordAuditHistory
と prvReadAuditSummary
特権があることを確認してください。
AuditDetail タイプ
これらのメッセージには、アクションの種類に応じた細かい詳細が含まれます。 これらの詳細は、次のテーブルが示しているように、ベース AuditDetail
タイプから派生した異なるタイプを使用して実装されます。
Web API | .NET 用 SDK | Description |
---|---|---|
AuditDetail ComplexType | AuditDetail クラス | 派生クラスの基本タイプを表示する。 監査レコードに対するアクセス権を付与します。 |
AttributeAuditDetail ComplexType | AttributeAuditDetail クラス | レコードのデータ変更が発生したときの詳細を提供します。 古い値と新しい値へのアクセスを提供します。 次のタイプのアクションによって返されます: - テーブル行イベント - メタデータ変更イベント - 監査変更イベント |
RelationshipAuditDetail ComplexType | RelationshipAuditDetail クラス | 多対多の関連付けを使用してレコードが関連付けまたは関連付け解除されたときの詳細を提供します。 関連付けの名前と、操作が変更されたレコードの一覧を提供します。 多対多の関連付けイベント により返されました。 |
RolePrivilegeAuditDetail ComplexType | RolePrivilegeAuditDetail クラス | セキュリティ ロール (Role) レコードの定義が変更されたときに、詳細を提供します。 ロールに関連付けられている新旧のロール特権に関する情報を提供します。 セキュリティ ロール変更イベント により返されました。 |
ShareAuditDetail ComplexType | ShareAuditDetail クラス | レコードが共有されている、共有されていない、または共有レコードへのアクセス レベルが変更された場合に、詳細を提供します。 レコード共有イベント により返されました。 |
UserAccessAuditDetail ComplexType | UserAccessAuditDetail クラス | ユーザー アクセス監査を追跡するための詳細を提供します。 間隔とアクセス時間の詳細を提供します。 ユーザー アクセス イベント により返されました。 |
重要
AuditDetail ComplexType を継承する前述の Web API タイプは、
AuditDetail
から継承する必要があるAuditRecord
ナビゲーション プロパティ値を返しません。 .NET 用 SDK クラスはこのデータを返します。Email.Description や 注釈 などの
AttributeAuditDetail
OldValue
やNewValue
プロパティに含まれる大きな列の値は、5KB か最大 5,000 文字に制限されています。 列の値の上限は、テキストの末尾にある省略記号 (…) で認識できます (たとえば "lorem ipsum、lorem ip…")。データは切り捨てられるため、これらの列の値への変更を復元するために使用することはできません。
RetrieveAuditDetails メッセージ
このメッセージを使用して、単一の監査レコードの監査の詳細を取得します。
RetrieveAuditDetails は、audit テーブルにバインドされた関数です。 Prefer: odata.include-annotations="*"
要求ヘッダーを含めて、書式設定された値 を取得します。
以下の例は、parentaccountid
が account
レコードに設定されている場合に、AttributeAuditDetail ComplexType が返されることを表しています。
要求:
GET [Organization URI]/api/data/v9.2/audits(12869c65-d7d3-ec11-b656-281878f0eba9)/Microsoft.Dynamics.CRM.RetrieveAuditDetails
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
Prefer: odata.include-annotations="*"
応答:
HTTP/1.1 200 OK
OData-Version: 4.0
Preference-Applied: odata.include-annotations="*"
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveAuditDetailsResponse",
"AuditDetail": {
"@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
"InvalidNewValueAttributes": [],
"LocLabelLanguageCode": 0,
"DeletedAttributes": {
"Count": 0,
"Keys": [],
"Values": []
},
"OldValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account"
},
"NewValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"_parentaccountid_value@OData.Community.Display.V1.FormattedValue": "A. Datum Corporation",
"_parentaccountid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "parentaccountid",
"_parentaccountid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "account",
"_parentaccountid_value": "d249d106-38b5-ec11-983f-002248296cd0"
}
}
}
詳細情報
RetrieveAttributeChangeHistory メッセージ
このメッセージを使用して、特定のテーブル列の変更の一覧を取得します。
PagingInfo
パラメーターを使用して返すレコードの数を制限し、ページを前後に移動させます。 後続の要求では、PagingInfo.PagingCookie
プロパティを AuditDetailCollection.PagingCookie
によって返される値に設定します。
このメッセージの変更は、常に AttributeAuditDetail
タイプです。
この例では、account
テーブル レコードの description
列に対する監査済み単一の変更履歴が返されます。
要求:
GET [Organization URI]/api/data/v9.2/RetrieveAttributeChangeHistory(Target=@target,AttributeLogicalName=@attributeLogicalName,PagingInfo=@paginginfo)?
@target={ '@odata.id':'accounts(611e7713-68d7-4622-b552-85060af450bc)'}
&@attributeLogicalName='description'
&@paginginfo={
"PageNumber": 1,
"Count": 1,
"ReturnTotalRecordCount": true
}
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
応答:
HTTP/1.1 200 OK
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveAttributeChangeHistoryResponse",
"AuditDetailCollection": {
"MoreRecords": true,
"PagingCookie": "<cookie page=\"1\"><cookieExtensions ContinuationToken=\"{"pageNumber":2,"continuationToken":"[{\\"compositeToken\\":{\\"token\\":null,\\"range\\":{\\"min\\":\\"3A800000000000000000000000000000\\",\\"max\\":\\"3B000000000000000000000000000000\\"}},\\"orderByItems\\":[{\\"item\\":\\"2022-05-13T22:06:46.6175613Z\\"}],\\"rid\\":\\"CVoNAJIidnNsmz0AAADwAw==\\",\\"skipCount\\":0,\\"filter\\":null}]"}\" /></cookie>",
,
"TotalRecordCount": 3,
"AuditDetails": [
{
"@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
"InvalidNewValueAttributes": [],
"LocLabelLanguageCode": 0,
"DeletedAttributes": {
"Count": 0,
"Keys": [],
"Values": []
},
"OldValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"description": "Old description value"
},
"NewValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"description": "New description value"
}
}
]
}
}
詳細情報
RetrieveRecordChangeHistory メッセージ
RetrieveRecordChangeHistory
メッセージは、Target
パラメーターが示す特定のレコードに対するデータ変更の履歴を表します。
PagingInfo
パラメーターを使用して返すレコードの数を制限し、ページを前後に移動させます。 後続の要求では、PagingInfo.PagingCookie
プロパティを AuditDetailCollection.PagingCookie
によって返される値に設定します。
このメッセージの結果は、モデル駆動型アプリで関連>監査履歴を選択したときに表示される AttributeAuditDetail
データとしてよく見られるものです。 レコードの古い値と新しい値が表示されますが、RelationshipAuditDetail
と ShareAuditDetail
型も返されます。
このメッセージは、systemuser
と role
テーブルで使用され、RolePrivilegeAuditDetail
と UserAccessAuditDetail
型を返します。
次の例では、アカウント レコードの 4 つの変更のうち最初の 2 つだけが返されます。
要求:
GET [Organization URI]/api/data/v9.2/RetrieveRecordChangeHistory(Target=@target,PagingInfo=@paginginfo)?
@target={ '@odata.id':'accounts(611e7713-68d7-4622-b552-85060af450bc)'}
&@paginginfo={
"PageNumber": 1,
"Count": 2,
"ReturnTotalRecordCount": true
}
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
If-None-Match: null
応答:
HTTP/1.1 200 OK
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#Microsoft.Dynamics.CRM.RetrieveRecordChangeHistoryResponse",
"AuditDetailCollection": {
"MoreRecords": true,
"PagingCookie": "<cookie page=\"1\"><cookieExtensions ContinuationToken=\"{"pageNumber":2,"continuationToken":"[{\\"compositeToken\\":{\\"token\\":null,\\"range\\":{\\"min\\":\\"38000000000000000000000000000000\\",\\"max\\":\\"38800000000000000000000000000000\\"}},\\"orderByItems\\":[{\\"item\\":\\"2022-05-13T22:06:27.8029732Z\\"}],\\"rid\\":\\"CVoNAJIidnPOnT0AAAAICA==\\",\\"skipCount\\":0,\\"filter\\":null}]"}\" /></cookie>",
"TotalRecordCount": 4,
"AuditDetails": [
{
"@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
"InvalidNewValueAttributes": [],
"LocLabelLanguageCode": 0,
"DeletedAttributes": {
"Count": 0,
"Keys": [],
"Values": []
},
"OldValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"description": "Old description value"
},
"NewValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"description": "New description value"
}
},
{
"@odata.type": "#Microsoft.Dynamics.CRM.AttributeAuditDetail",
"InvalidNewValueAttributes": [],
"LocLabelLanguageCode": 0,
"DeletedAttributes": {
"Count": 0,
"Keys": [],
"Values": []
},
"OldValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"_ownerid_value@OData.Community.Display.V1.FormattedValue": "FirstName LastName",
"_ownerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "ownerid",
"_ownerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "systemuser",
"_ownerid_value": "4026be43-6b69-e111-8f65-78e7d1620f5e"
},
"NewValue": {
"@odata.type": "#Microsoft.Dynamics.CRM.account",
"_ownerid_value@OData.Community.Display.V1.FormattedValue": "TeamName",
"_ownerid_value@Microsoft.Dynamics.CRM.associatednavigationproperty": "ownerid",
"_ownerid_value@Microsoft.Dynamics.CRM.lookuplogicalname": "team",
"_ownerid_value": "39e0dbe4-131b-e111-ba7e-78e7d1620f5e"
}
}
]
}
}
注意
現在返される AuditDetail ComplexType 値には AuditRecord
プロパティが含まれないため、誰がいつ変更を加えたかについてのデータはありません。
詳細情報
参照
監査の概要
監査の構成
監査データを削除
Dataverse 監査を管理する
サンプル: 監査テーブルのデータ変更
サンプル: ユーザー アクセスの監査