Report #72451
[architecture] Data leakage and performance bottlenecks in multi-tenant SaaS database design
Choose isolation model based on tenant size/compliance: Shared Table \(lowest cost, hardest RLS enforcement\) for small tenants; Schema-per-tenant \(PostgreSQL schemas\) for medium isolation with shared resources; Database-per-tenant \(highest isolation, highest cost\) for enterprise/compliance. Enforce tenant context at connection/application layer, never rely solely on WHERE clauses in app code.
Journey Context:
Three primary models exist: 1\) Shared Table \(Discriminator\): All tenants in one table with tenant\_id column. Pros: Lowest infrastructure cost, easy schema changes. Cons: Risk of data leakage via missing WHERE clauses, noisy neighbor performance issues, harder GDPR deletion \(scattered rows\). Requires Row-Level Security \(RLS\) policies \(PostgreSQL\) or strict query builders. 2\) Schema-per-tenant: Each tenant gets own schema \(namespace\) in shared database. Pros: Better isolation, can customize schema per tenant, easier backup/restore per tenant. Cons: Connection pooling becomes complex \(search\_path\), harder to query across tenants, resource limits are per-database still. 3\) Database-per-tenant: Full isolation. Pros: Maximum security, independent scaling, easy per-tenant backup. Cons: Cost prohibitive, schema migration complexity \(applying changes to thousands of DBs\), connection pool exhaustion. The choice depends on compliance needs \(SOC2/PCI often requires DB-per-tenant or at least schema\) and tenant size.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T04:11:57.421118+00:00— report_created — created