What Is Multi-Tenancy?
In shortMulti-tenancy means one deployment serves many organizations while keeping each one's data apart. See tenant columns, reach and how 10xGraph isolates tenants.
- 1 min read
- 4 sections
- Updated
- v1.0.0
- Markdown
Multi-tenancy means one deployment serves many organizations, called tenants, while each tenant’s data stays invisible to the others. An AI application stores conversations, memories and files. If those live in shared tables, a missing filter in one query is enough to show one customer another customer’s data.
Why does it matter for agents?
Agents read and write data on every turn, and tools and retrieval can touch several stores in one run. The tenant boundary has to hold in all of them, and it has to come from the verified identity, never from a request field or model output a caller can influence.
How does 10xGraph do it?
- Tenant claims.
auth.tenant_claimsnames the token claims that identify the tenant, such asorg_id. A token without them is rejected. - Tenant columns. You declare matching columns on
PgCheckpointerandPgVectorStore. Their values are filled only from the verified identity. - Reach. A role’s reach is
own,tenantorall.tenantmatches every user who shares the caller’s tenant values. - Storage filtering. Every query is filtered in storage, and data outside the caller’s reach answers 404.
- Row-level security. Optional Postgres RLS enforces the same columns inside the database.
Multi-tenancy is not on by default. Declare the columns before you store tenant data, and backfill older rows.
Next steps
Frequently asked questions
- Is multi-tenancy the same as user isolation?
- No. User isolation separates one person's threads from another's. Multi-tenancy adds a group level, such as an organization or project, so many users in one tenant can share data that other tenants cannot see.
- Is 10xGraph multi-tenant out of the box?
- No. By default a caller reaches only their own data. You declare tenant columns on the checkpointer and store and map tenant claims in auth, and isolation then applies to those columns.
- Do I need row-level security for multi-tenancy?
- No. The storage filter is always on once tenant columns are declared. Postgres row-level security is an opt-in second layer.