Dataverse and model-driven apps audit

OperationDescriptionSampleRule
anyCatch-all for M365-CRM rules matching the RecordType but no specific Operation.NY
AccessA record is read, for example via Retrieve or RetrieveMultiple SDK messages (audit_operation picklist value 4).NN
ArchiveA record is moved to long-term archive storage (audit_operation picklist value 115).NN
CreateA record is created (audit_operation picklist value 1).NN
CustomOperationA custom SDK message or plugin-driven operation triggers the audit record (audit_operation picklist value 200).NN
DeleteA record is deleted (audit_operation picklist value 3).NN
RestoreA record is restored from archive or backup (audit_operation picklist value 118).NN
RetainA record is retained under a Dataverse long term retention policy (audit_operation picklist value 116).NN
RollbackRetainA prior Retain operation on a record is rolled back (audit_operation picklist value 117).NN
UpdateA record is updated (audit_operation picklist value 2).NN
UpsertA record is created if it does not exist or updated if it does (audit_operation picklist value 5).NN

any: Dataverse and model-driven apps audit (catch-all)

#
RecordType
CRM

Description

Catch-all for M365-CRM rules matching the RecordType but no specific Operation.

Common Indicators #

Field/value combinations most frequently checked by detection rules targeting this event, derived from cross-vendor predicate analysis.

FieldKindValueRulesVendors
ClientIp (kusto rule field)is_not_null6 ruleskusto
Message (kusto rule field)eqUserSignIn6 ruleskusto
Message (kusto rule field)eqUpdate5 ruleskusto
Message (kusto rule field)eqCreate2 ruleskusto
Message (kusto rule field)eqDelete2 ruleskusto
Message (kusto rule field)inCreate2 ruleskusto
Message (kusto rule field)inUpdate2 ruleskusto
EntityName (kusto rule field)eqorganization4 ruleskusto
EntityName (kusto rule field)eqsystemuser3 ruleskusto
aws::userAgent (kusto rule field)is_not_null3 ruleskusto
DataverseActivity_TimeGenerated (kusto rule field)cross_field_compareExpirationDateTime2 ruleskusto
Value (kusto rule field)eqFalse2 ruleskusto
user (kusto rule field)neunknown2 ruleskusto
watchlist_entries_count (kusto rule field)gt02 ruleskusto
ActionType (kusto rule field)eqUsbDriveMounted1 rulekusto

Detection Rules #

Full rule details for this event, including ATT&CK technique mappings and native queries →

Kusto #

Access

#
RecordType
CRM

Description

A record is read, for example via Retrieve or RetrieveMultiple SDK messages (audit_operation picklist value 4).

Archive

#
RecordType
CRM

Description

A record is moved to long-term archive storage (audit_operation picklist value 115).

Create

#
RecordType
CRM

Description

A record is created (audit_operation picklist value 1).

CustomOperation

#
RecordType
CRM

Description

A custom SDK message or plugin-driven operation triggers the audit record (audit_operation picklist value 200).

Delete

#
RecordType
CRM

Description

A record is deleted (audit_operation picklist value 3).

Restore

#
RecordType
CRM

Description

A record is restored from archive or backup (audit_operation picklist value 118).

Retain

#
RecordType
CRM

Description

A record is retained under a Dataverse long term retention policy (audit_operation picklist value 116).

RollbackRetain

#
RecordType
CRM

Description

A prior Retain operation on a record is rolled back (audit_operation picklist value 117).

Update

#
RecordType
CRM

Description

A record is updated (audit_operation picklist value 2).

Upsert

#
RecordType
CRM

Description

A record is created if it does not exist or updated if it does (audit_operation picklist value 5).

References #

M365 audit records use different field names on each surface #

The same Unified Audit Log record uses different field names on each surface. A query built for one surface can silently miss on another. These pages document the Management Activity API JSON names, the same names Search-UnifiedAuditLog and the Office 365 Management Activity API return.

  • Purview CSV export flattens each record to four columns (CreationDate, UserIds, Operations, AuditData). The API field names live only inside the AuditData JSON blob. Expand it with ConvertFrom-Json. The wrapper columns are renamed too: CreationDate not CreationTime, UserIds not UserId, Operations not Operation.
  • Sentinel's OfficeActivity table renames several fields and turns two integer enum columns into strings. The table below maps them.
API JSON (event pages)OfficeActivity columnNote
IdOfficeIdRenamed.
WorkloadOfficeWorkloadRenamed.
ObjectIdOfficeObjectIdRenamed.
CreationTimeTimeGeneratedRenamed. OfficeActivity has no CreationTime column.
SiteUrlSite_UrlRenamed (SharePoint family).
RecordTypeRecordTypeSame name; the Int32 enum becomes its string enum name.
UserTypeUserTypeSame name; the Int32 enum becomes a string.
ClientIPClientIP, Client_IPAddressBoth columns present on OfficeActivity.
Scope(none)No OfficeActivity equivalent under any name. Recover it from the API JSON or the Purview AuditData blob.
Operation, UserId, ResultStatus, UserKey, AppAccessContext, OrganizationIdsame namesUnchanged. No _s / _d suffixes (a native table, not a custom log).

Mapping verified against the OfficeActivity table reference, the Management Activity API schema, and the Purview audit-record export format.