Almanac
Microsoft/d365csDynamics 365

Consultant-focused KB for Microsoft Dynamics 365 Customer Service: implementation notes, gotchas, and configuration decisions beyond the official docs — across case management, queues and routing, knowledge base, SLAs, omnichannel, agent experience, Copilot, analytics, and administration.

feature-cs-auditing.mdv1 · history
CurrentApplies to AllUpdated 6 days agoSource Microsoft Learn

What it does

Dataverse auditing records who changed what and when, and surfaces it as audit history on the record. On a service desk it's what answers "who reassigned this case", "who changed the SLA", and the compliance question about access to customer data.

Key facts

  • Auditing has three switches and all three must be on for a column to be audited: environment level, table level, and column level. Any one of them off means no data.
  • Environment level lives in the Power Platform admin center under Security > Compliance > Auditing: Start Auditing, Log access (sign-ins), and Read logs (sends read events to Microsoft Purview).
  • Table level is the "Audit changes to its data" checkbox in the table's advanced options. Column level is "Enable auditing" on the column.
  • There's a quick-enable option, Common entities across Dynamics 365 apps, that switches on around forty standard tables including Account, Contact and the usual suspects.
  • Retention defaults to Forever. A custom retention policy accepts up to 24,855 days.
  • Changing the retention period only stamps records created afterwards. Existing audit rows keep the retention they were written with.
  • Audit data consumes log storage capacity, which is billed and reported separately from database capacity.
  • Individual attribute values are capped at about 5 KB in the audit record, so long text changes are truncated.
  • Deleting audit logs is asynchronous and slow: roughly 4 million rows an hour, about 100 million a day. Bulk deletion in the environment's data management area is where you do it, by table, by access log, or up to a chosen date.
  • Audited operations include create, update and delete, sharing privilege changes, N:N associate and disassociate, security role changes, and deletion of audit logs themselves.
  • Not audited: table and column definition changes, authentication events, and retrieves unless Read logs is on.
  • Separate privileges control the experience: View Audit History, View Audit Summary, and Delete Audit Record Change History. Turning auditing on or off needs System Administrator or System Customizer.
  • Twenty-six non-customisable tables cannot be audited at all, ActivityPointer and Annotation among them.

When to use / skip

Turn it on. Every regulated client needs it, and every unregulated client eventually asks a question that only audit history can answer. The judgment call isn't whether, it's how much.

Where to be disciplined: don't enable auditing on every column of every table because the checkbox is there. Audit the columns that carry consequence — case owner, status, resolution, priority, entitlement, SLA fields, customer, and any column your client's regulator names. Auditing free-text description fields on a high-volume case table generates enormous log volume for material nobody ever reads.

Read logs is a different decision again. It answers "who looked at this customer's data", which is a genuine requirement in financial services and health, and an expensive luxury everywhere else.

Configuration decisions

  • Which tables and which columns are audited, agreed with whoever owns the client's compliance position rather than assumed.
  • Whether Log access is on, which is usually cheap and usually worth it.
  • Whether Read logs is on, which is neither.
  • The retention period: Forever, or a defined number of days that matches the client's records policy. Set it before you accumulate data, because it only applies going forward.
  • Who holds View Audit History and View Audit Summary — supervisors, or only a compliance role.
  • Whether auditing configuration travels in a solution or is applied per environment by runbook, and whether non-production environments audit at all.

Gotchas

  • The three-level switch is the classic trap. Table auditing looks enabled, the environment switch was never turned on, and there's no history for the period nobody checked.
  • Retention changes are not retrospective. A client who runs Forever for two years and then sets 90 days still has two years of rows and a bill to match.
  • Audit log storage is a separate capacity line. It's a common source of an unexpected overage invoice on a busy service desk.
  • Deleting audit data to recover capacity takes days at realistic volumes. It is not an emergency remedy.
  • The 5 KB attribute cap means audit history on long text is incomplete, which undermines it as evidence for exactly the fields people assume it covers.
  • Annotation can't be audited, so "who changed the note on this case" has no answer through this mechanism.
  • Auditing configuration is metadata and moves in solutions, which means a careless import can switch auditing off on tables in production.

Consultant notes

  • Agree the audited column list in a workshop and keep the signed-off version. When someone asks two years later why a field wasn't audited, that document is the whole answer.
  • Set the retention policy on day one. It's the single decision that costs money if you leave it.
  • Show the client where audit history appears on the case form, and who can see it. Supervisors usually assume they can and often can't.
  • Check log storage consumption at the end of the first month post go-live and extrapolate. Better to trim the column list early than to delete rows later.
  • Push back on "audit everything". It's not a security posture, it's a capacity problem with a compliance justification attached.

Worth another look if log storage consumption jumps, or if the client's regulator changes its retention expectations.

Was this accurate?