Tenant Isolation
Row-Level Security at the PostgreSQL layer enforces tenant boundaries on every query. Not a filter, not a tag — a schema-level guarantee.
Most multi-tenant SaaS isolates tenants with `WHERE tenant_id = ?` filters in application code. One missing filter, one bug, and tenant data leaks. FrontLine moves isolation into the database: PostgreSQL Row-Level Security policies reject queries that don't carry a tenant claim, so application bugs cannot cause cross-tenant data exposure.
Isolation enforced at the schema, not patched on in application code
Every table carrying tenant-scoped data has an RLS policy bound to the `app.tenant_id` session variable. The API service sets that variable from the authenticated JWT's tenant claim before any query runs. Policies are `RESTRICTIVE` (deny-by-default), so a missing or mismatched session variable returns zero rows rather than leaking. RLS is enabled at the database role level — even direct DB access via a connection pool cannot bypass it. Policies are version-controlled alongside the schema.
What's covered out of the box
Audit-ready artifacts your reviewers can lean on
- SOC 2 Type II — logical separation controls
- PIPEDA — reasonable safeguards for personal information
- GDPR Article 32 — security of processing
- Audit-ready evidence: RLS policy DDL exported on request
What security and compliance reviewers actually ask
Can the application accidentally leak cross-tenant data?+
How is the tenant claim verified?+
What about database administrators?+
How do you test that isolation works?+
Run this past your security team
We share security overviews, RLS policy DDL, audit-event schemas, and SOC 2 progress on request. Book a 30-minute security review with the founders.