DEV Community

Mads Hansen
Mads Hansen

Posted on

Tenant scoping is the AI database filter that cannot be optional

The easiest way to make an AI database agent dangerous is to let tenant scope become a suggestion.

A human analyst usually knows that a customer support question should only touch one account.

A model does not know that unless the system makes the boundary explicit.

And if the boundary lives only in a prompt, it is not a boundary.

It is a preference.


Why this matters

Most SaaS databases contain data from many customers in the same logical system.

Application code normally adds the current tenant, workspace, account, or organization filter automatically.

Natural-language SQL changes the path.

The user asks:

show me recent failed syncs

or:

which invoices are overdue?

The agent turns that into a query.

If the system does not enforce tenant scope outside the model, the agent may generate a valid query that answers the wrong audience.

The failure may not look like a crash.

It may look like a plausible answer with other customers' data included.


What good tenant scoping looks like

For AI database workflows, tenant scope should usually be enforced through infrastructure:

  • approved views instead of raw tables
  • database roles scoped to schemas/views
  • row-level security where appropriate
  • server-side parameter binding for tenant identifiers
  • query validation that rejects broad reads
  • tool contracts that separate tenant-scoped reads from admin reads
  • audit logs showing which scope was applied

The model should understand the boundary.

But it should not be able to remove the boundary by phrasing the request differently.

Full article: Tenant scoping for AI database agents

Conexor is MCP infrastructure for AI-ready engineering teams connecting databases and APIs to Claude, ChatGPT, Cursor, n8n, Continue, and other MCP clients.

The goal is not just to let an agent query data.

It is to make every query scoped, explainable, and reviewable from the start.

Top comments (0)