Multi-Tenant Reporting-Plattform mit Row-Level-Security
Jurisdiktions-genaue Reports für 180+ Tenants in DACH, mit garantierter Datenisolation auf DB-Ebene.
Ausgangslage
Obsidian lieferte regulatorische Reports an 180+ Finanzinstitute in DACH. Die bestehende Plattform war Single-Tenant repliziert — jeder neue Kunde = separate DB-Instance, separate Deployment-Pipeline, 3 Wochen Onboarding-Zeit. Nicht skalierbar.
Unser Ansatz
Multi-Tenancy on a single shared Postgres (TimescaleDB-Extension für Zeitreihen), mit Row-Level Security Policies als harte Isolation. Jede Query läuft im Kontext einer Tenant-ID, die über Connection-Settings gesetzt wird — Datenleaks sind physikalisch unmöglich, nicht nur durch Application-Logic.
Architektur
- TimescaleDB Hypertables für Report-Payloads (jurisdiction + period als Composite-Keys)
- RLS Policies pro Tabelle mit
current_setting('app.tenant_id') - Jurisdiction-Validation via PostgreSQL EXCLUDE Constraints (keine überlappenden Perioden)
- React-Dashboard mit per-Tenant Themes (White-Label-Ready)
- AWS ECS Deployment, Aurora Postgres Backend
Ergebnis
180+ Tenants auf einer DB. Onboarding von 3 Wochen auf 15 Minuten. 12.000 Reports/Monat, P95-Latenz unter 200ms. Zero Data-Leak-Incidents in 9 Monaten Production.
Was wir gelernt haben
RLS ist unterschätzt. Viele Teams schreiben ihre eigene Tenant-Isolation in der Application-Layer — fragil, error-prone. Postgres-native RLS verschiebt die Isolation auf die Ebene wo sie hingehört: in die Engine, die die Daten hält.