curiosity

Article · Multi-tenancy

What is a multi-tenant AI platform?

A multi-tenant AI platform serves many customers or teams from one platform, and keeps each one’s data, prompts and answers apart. Platforms differ in how much the tenants share: one database, one app or nothing but the address in front. What is shared is where one tenant’s data can reach another.

Topic Multi-tenancy Reading time 7 min References 7 Updated October 2026

In short

A multi-tenant AI platform serves many tenants and keeps each tenant’s data, prompts, answers and logs out of the others’ reach. A tenant is whoever the platform keeps apart: a customer, a subsidiary, or a team inside one company.

Three neighboring ideas get mixed up with it.

  • Multi-user means many people in one tenant. They share its data, under its permissions.
  • Permissions decide what each person inside a tenant may open. Tenant isolation decides that nobody outside it can open anything. A platform needs both, and they fail in different ways. Our article on permission-aware retrieval covers the first.
  • Single-tenant means a deployment that serves one tenant. A platform can run many of those behind one front door and still be multi-tenant as a whole.

Three isolation models

Every multi-tenant design answers one question: which layers do the tenants share? Microsoft’s guide to tenancy models puts it plainly: “Instead of viewing isolation as a discrete property, consider it a spectrum.” Three points on that spectrum cover most platforms.

  • Shared everything. One app, one cache, one database. Each row carries a tenant id, and every query filters on it. This is the cheapest to run, and the separation lives in code and database policy.
  • A database per tenant. The app is shared, the data is not. The boundary is the database and its credentials. It holds when the credentials, network paths and backups are separate too.
  • An instance per tenant. Each tenant gets its own copy of the application and its own data. Only the address, the operations around it and the hardware are shared.

The AWS SaaS Lens calls the ends of the range silo and pool, and the mix in between bridge. It adds that a silo still shares identity, onboarding and operations. Without them, it is a managed service running separate copies of a product.

Isolation models

What three tenants share

Four layers, three models. Follow one of tenant B’s records from one model to the next. Pick a step to stop the drawing and read it.

Three ways to house three tenants A table of four layers, the address, the app, the cache and the database, and three isolation models. Shared everything puts all three tenants in one app, one cache and one database, separated by a tenant id on each row, and shares four of four layers. A database per tenant shares the address, the app and the cache, three of four. An instance per tenant gives each tenant its own app, cache and database and shares only the address, one of four. One of tenant B’s records is followed through the three. ADDRESSAPPCACHEDATABASESHAREDEVERYTHINGDATABASEPER TENANTINSTANCEPER TENANTLAYERS SHARED4 of 43 of 41 of 4TENANT ATENANT BTENANT C
Three ways to house three tenants Four layers, the address, the app, the cache and the database, under three isolation models. Shared everything shares four of four layers, a database per tenant three of four, an instance per tenant one of four, the address. One of tenant B’s records is followed through the three. ADDRESSAPPCACHEDATABASESHAREDALLOWNDATABASEOWNINSTANCESHARED4 of 43 of 41 of 4TENANT ATENANT BTENANT C
  1. 01

    Three tenants, four layers

    Tenants A, B and C use one product. Each request passes an address, the app, a cache and a database.

  2. 02

    Shared everything

    One app, one cache, one database. A tenant id on every row is all that keeps B’s records apart.

  3. 03

    A database per tenant

    The app and the cache stay shared. B’s records move into a database of their own.

  4. 04

    An instance per tenant

    Each tenant gets its own app, cache and database. Only the address in front is shared.

  5. 05

    Count what is shared

    Four layers, three or one. Even an instance per tenant shares the address and the hardware under it.

What AI adds to the picture

A platform without AI keeps tenant data in a database and a file store. An AI platform keeps it in many more places, and each one needs the same boundary:

  • Prompts and chat history. A question often says more than the records it is about.
  • The context sent to the model. An answer built from two tenants’ records is a leak, even when nothing is stored.
  • Search indexes, the keyword index and the one built for search by meaning.
  • Caches of answers, of search results and of prompts on the model server.
  • Tuned models. Microsoft’s guidance on AI in multitenant solutions says to treat a model as sensitive as the data it was trained on. A model tuned on one tenant’s records and served to another can repeat them.
  • Logs and traces, which often hold the full prompt and the full answer.
  • Agent memory and tool credentials, which outlive a single conversation.

What leaks when isolation fails

In a shared design, isolation is a rule that every code path has to follow. OWASP’s multi-tenant security cheat sheet starts from the cost: a single bug can expose every tenant’s data. Its list of failures reads like a tour of the layers above.

  • A tenant id taken from a request header without checking that the caller belongs to that tenant.
  • A record fetched by its id alone, with no check of whose it is.
  • A database connection returned to a pool still set to the last request’s tenant.
  • A cache keyed on the question and not on who asked. The cheat sheet’s rule: “Include the tenant identifier in every cache key whose value or authorization varies by tenant.”
  • Logs that mix tenants, or hold their data in plain text.

Caches can leak without any bug in the application. In a 2025 audit of language model APIs, researchers timed how fast prompts came back. A cached prompt returns faster, which can reveal what someone else asked. They report: “We detect global cache sharing across users in seven API providers, including OpenAI, resulting in potential privacy leakage about users’ prompts.”

Our paper The app is the easy part collects documented leaks of this kind, and the layer each one was missing.

How a leak happens

One cache key, two tenants

An answer cache saves a call to the model. Keyed on the question alone, it hands one team’s answer to another.

An answer cache that forgot the tenant Team A asks whether supplier S-14 is on hold and gets an answer from its own records, which is cached under the question’s words. Team B, another tenant, asks the same question and the cache hands it A’s answer without reading B’s records. With the tenant in the cache key, A and B get separate entries, and B gets its own answer. TEAM AIs S-14 on hold?RECORDSANSWERTEAM BIs S-14 on hold?RECORDSANSWERANSWER CACHEKEYVALUES-14 on hold?A · S-14 on hold?B · S-14 on hold?
An answer cache that forgot the tenant Team A asks whether supplier S-14 is on hold, and its answer is cached under the question’s words. Team B, another tenant, asks the same and gets A’s answer from the cache. With the tenant in the key, B gets its own answer. TEAM AIs S-14 on hold?RECORDSANSWERANSWER CACHEKEYVALUES-14 on hold?A · S-14 on hold?B · S-14 on hold?TEAM BIs S-14 on hold?RECORDSANSWER
  1. 01

    Team A asks

    Is supplier S-14 on hold? The assistant reads A’s records and answers from them.

  2. 02

    The answer is cached

    To save the next call to the model, the answer is stored under the question’s words.

  3. 03

    Team B asks the same

    Another tenant types the same question. Its records say something else about S-14.

  4. 04

    The cache answers

    The key matches, so B gets A’s answer. B’s records were never read, and no access check ran.

  5. 05

    The tenant in the key

    With the tenant in the key, B misses the cache and gets its own answer, from its own records.

Noisy neighbors

Isolation is about performance too. Microsoft’s noisy neighbor antipattern describes the problem: one tenant’s heavy use slows down or breaks the system for the others. It also happens when many small tenants peak at the same hour.

AI makes the neighbors louder. One tenant re-indexes its whole archive, or runs a batch of long prompts through a shared model server. Everyone else waits for the GPU, or hits the rate limit the platform shares with its model provider.

The remedies are the ones Microsoft lists: measure use per tenant, set quotas, and give a tenant capacity of its own when it needs it. Separate instances remove most of the problem, but not all of it. Instances on one machine still share its memory and processors.

How to evaluate a vendor’s answer

“Your data is isolated” is a claim, not an answer. Ask for the mechanism, layer by layer:

  1. What is a tenant in your system: our company, or each team or customer we serve?
  2. Which layers do tenants share: the app, the database, the search index, the caches, the model, the logs, the backups?
  3. Where a layer is shared, what enforces the boundary: application code, a database policy, separate credentials or a separate process?
  4. Are prompts, answers and traces kept per tenant, and who at your company can read them?
  5. Is any model trained or tuned on our data, and is it served to anyone else?
  6. What stops one tenant from slowing the others down, and what capacity is ours alone?
  7. How do you test isolation, and can we see the tests?
  8. When we leave, what is deleted, from where, and when?

Microsoft’s guide ends on the same point as question 7: whatever the model, test that one tenant’s data does not reach another. A vendor with a good answer will show you the test, not only the diagram.

How Curiosity separates tenants

Curiosity takes the instance per tenant end of the range. Curiosity Orchestrator gives each team, project or customer its own Curiosity Studio on hardware you control. Each Studio keeps its own data, its own users and its own settings, the model among them. In the Orchestrator documentation, each is a container with its own data volume.

What the Studios share is the front: one address, one console to manage all of them, and an optional single sign in. A Studio nobody has opened for a while goes to sleep, and the next visit wakes it. So the server is sized for the Studios in use, not for every Studio.

They also share the machine. You can cap how many run at once, and when memory runs short the Studio used least recently sleeps first. One orchestrator can manage others on more machines. The orchestrator controls Docker on the server, so treat that server as sensitive. Opened on its own subdomain, a Studio is kept apart from the others in the browser too. The security guide says when that matters.

Inside each Studio, access is synced from your source systems and checked per record at query time. Cloud deployments keep each customer in an isolated tenant, as the Trust Center lists.

FAQ

Questions people ask

What is the difference between multi-tenant and single-tenant?

A single-tenant deployment serves one customer or team, with its own app and data. A multi-tenant platform serves many and keeps them apart, by sharing some layers and separating others. A platform can also run a single-tenant instance per tenant behind one address.

Is row-level security enough to isolate tenants?

It can be, if every query runs through it. OWASP’s cheat sheet names the gaps. Some database roles bypass the policy, and a reused connection can carry the last request’s tenant. Caches, files and logs sit outside the database altogether. Test each path.

Can a shared AI model leak data between tenants?

A model that only answers, and is never trained or tuned on tenant data, does not learn any tenant’s records. A model tuned on one tenant’s records and served to another can repeat them. Shared prompt caches on a model server can also reveal what others asked, through response times.

Can each team or customer get its own Curiosity Studio?

Yes. Curiosity Orchestrator runs a Studio for each team, project or customer on your own servers, behind one address. Each keeps its own data, users and settings, and sleeps when nobody uses it.

Your data. Your infrastructure.

A Studio for every team. Nothing shared but the address.