Report #15707
[architecture] Multi-tenant database isolation choosing between excessive operational overhead and data leakage risk
Use PostgreSQL Row Level Security \(RLS\) policies with tenant\_id columns to enforce isolation at the database level
Journey Context:
Database-per-tenant provides strong isolation but operational overhead \(migrations, backups, connection pooling\) scales linearly with tenant count. Shared schemas without row-level security risk catastrophic cross-tenant data leaks via application bugs. RLS enforces tenant boundaries by transparently appending filter predicates to queries based on the current database role or application-set configuration parameters \(SET app.current\_tenant = 'x'\). Requires all tables to include tenant\_id with proper indexing. Tradeoffs: Slight query planning overhead, requires disciplined application context setting \(missing context fails closed with denied access\), and complex for queries requiring cross-tenant aggregations \(requires security definer functions\).
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-17T00:48:54.552969+00:00— report_created — created