Dataverse Identity for Agent Builders (Who Actually Runs the Action?) | elijah.ai
Makers, Microsoft-hosted: Part 3 of 5. Back: MCP tools in Studio. Next: Flows as tools. Series: 1 · 2 · 3 · 4 · 5

Dataverse Identity for Agent Builders (Who Actually Runs the Action?)

Why this exists: Copilot gave a confident wrong answer, or the tool “could not find” a row that is definitely there. Half the time the model is fine. Dataverse security is doing exactly what you asked it to do under the identity you actually used.

For you if: Your agent uses a tool that touches Dataverse directly or through a cloud flow and you need the result to match real user rights.

Ground rule: Dataverse lives in Microsoft’s cloud here. Row-level security, business units, and roles do not take a day off because an AI called something.

The question to ask before you design anything

Should this action behave like the human using the agent, or like a shared system account?

There is no moral prize for picking the fancier option. Pick the one that matches your audit story and the sensitivity of the rows.

Patterns makers actually build

User context (delegated, human-shaped)

The tool or flow runs with the user who triggered things. Good when someone should only see their pipeline, their cases, or their region’s rows. If your testers use god-mode admin accounts and real users do not, you will ship a ghost bug.

Application user / service principal shape (automation account)

A dedicated identity in Dataverse carries its own role bundle. Everyone gets the same slice of reality. Good for curated knowledge, reference tables, or guarded update operations your org signed off on. Bad surprise when someone expected private rows to stay private unless you designed for that.

Testing discipline that catches real issues

  • Create a test user that matches a real role tomorrow, not your owner account today.
  • Run the same prompt twice: once as maker admin, once as that test user.
  • If the tool calls a child flow, confirm Run only users and connection ownership do not accidentally widen access.

This is the part nobody wants to do. It is cheaper than executive escalation.

When you escalate, bring a spec, not a mood

Admins and security folks respond faster to a tight ask.

  • “We need role X on application user Y for table Z because…”
  • “Row-level security on this table hides child rows unless we own the parent. Here is the scenario.”
  • “Flow runs as owner; we need it to use invoker’s connection instead.”

Quick comparison

AspectUser-shaped runsShared automation account
Audit trail looks likeIndividual peopleOne service identity
Row-level securityUsually what you want for human dataOnly safe if the account is narrowed on purpose
Surprise factor“Works for admin, fails for staff”“Everyone sees the same slice” (sometimes intended, sometimes not)

How this ties to the rest of the series

OAuth shape for the connector: Part 1. Pinning the tool in Studio: Part 2. If the tool is mostly a wrapper around Power Automate, go to Part 4. Auth garbage day: Part 5.

Microsoft sources