Enterprise

Prove your database isolates tenants.

Row-Level Security and function logic keep tenant A from seeing tenant B. seccover proves it stays true as the code keeps shipping.

What seccover checks

The objects that run with their owner's privileges, so they can bypass the caller's RLS.

The Security coverage report

Dated and reproducible. Four counters and four detection passes up top, then every routine judged role by role, with the table, command and channel of any leak.

Security coverage report flagging leaks. Eight SECURITY DEFINER functions read LEAKING in red with an X hole on the INSERT and WITH CHECK cell, and two views leak as well.
When a routine leaks, it is flagged. Here 8 functions and 2 views cross a trust boundary, each with the table and channel named.
Security coverage report with no leaks. Zero leaking, and the SECURITY DEFINER function is judged enforced as declared.
When isolation holds, the same report reads 0 leaking, every routine enforced as declared.

Two layers where tenant data leaks. One tool for each. Use both.

A test at one layer says nothing about the other.

rlsautotest

Policy layer
  • Proves each RLS policy, per table, per command and per identity
  • Fails CI on a reachable table with no policy
  • Names every SECURITY DEFINER function, view and trigger as a suspect

It cannot judge the suspects; it sees that code bypasses RLS, not whether it leaks.

rlsautotest, free and open source →

UnitAutogen seccover

Code layer
  • Runs each suspect as two tenants with generated data on both sides
  • A verdict per routine, enforced or leaking, with the table, command and channel
  • A PII pass for personal data escaping through error messages

It cannot stand in for the policies; direct table access is rlsautotest's job.

seccover, in the UnitAutogen engine →

Complete leakage detection needs both.

Evidence, not a certificate

What platforms suggest

seccover checks exactly what PostgreSQL, Supabase and Neon tell you to watch.