Postgres Row-Level Security für Multi-Tenant-Anwendungen

Jede Multi-Tenant-SaaS-Anwendung, an der ich gearbeitet habe, erlebt irgendwann denselben Vorfall: Ein Entwickler vergisst eine WHERE tenant_id = $1-Klausel in einer neuen Query, und plötzlich kann Tenant A die Rechnungen von Tenant B sehen. Code Reviews fangen die meisten dieser Fälle ab, aber nicht alle — und „die meisten" reicht nicht, wenn es sich um Kunden-PII oder Finanzdaten handelt.

Die Lösung ist nicht mehr Disziplin. Es geht darum, die Tenant-Isolation aus dem Anwendungscode heraus- und in die Datenbank selbst hineinzuverlagern. Mit Postgres Row-Level Security (RLS) kannst du Policies definieren, die Zeilen automatisch filtern, sodass selbst eine Query mit fehlender WHERE-Klausel keine Daten über Tenants hinweg leaken kann. Das ist kein Allheilmittel, aber für dieses spezielle Problem kommt es dem ziemlich nahe.