Continuous RLS monitoring for Supabase
One audit tells you about today. Continuous monitoring tells you the moment today stops being true — which, on a codebase where an AI writes the migrations, is roughly every deploy.
Rules that check this
- criticalRow Level Security disabled
RLS_DISABLED - highRLS enabled but no policies
RLS_NO_POLICIES - criticalPolicy always evaluates to true
RLS_TAUTOLOGY - highWrite policy without WITH CHECK
MISSING_WITH_CHECK - mediumRLS predicate column is not indexed
UNINDEXED_RLS_PREDICATE - highStorage bucket is public
PUBLIC_BUCKET_EXPOSURE - mediumauth.uid() not wrapped in a subquery
RLS_UNWRAPPED_AUTH_CALL
How a scan works
Each run takes one catalog snapshot and evaluates every rule as a pure function over it. That means a scan is a fixed number of round-trips regardless of rule count, and a new rule can be replayed over stored snapshots before it is switched on for alerting.
Findings are then diffed against the previous run and classified as new, regressed, or resolved.
From the terminal, and from CI
The same engine runs as a CLI against any connection string, printing the findings and the generated SQL.
npx rowshield scan --db-url "$DATABASE_URL" --fail-on high --sql
Alerts worth reading
Alerts fire on transitions only, with a severity threshold per destination. A project that has been broken for a week pages you once, and a medium-severity index finding does not wake anybody.
What the first week looks like
Day one connects the project and runs the first scan, which is usually the noisy one: every pre-existing finding appears at once as created. Read it as a baseline inventory rather than a crisis — severities sort what matters now from what belongs on next sprint’s list, and remediation SQL makes the critical fixes an afternoon rather than a project.
Days two through seven are where continuous monitoring diverges from any audit you have run before. Each scheduled scan diffs against the last; most produce nothing, which is the point — silence means nothing moved. When something does fire mid-week, it arrives as a single transition with context: this policy appeared, that fix regressed, this bucket went public.
By the end of the first week most teams have tuned alert thresholds per destination so chat receives only what deserves interruption, and email keeps the rest. The cadence follows your plan — daily on Free, hourly on Indie, fifteen minutes on Team — and findings are never withheld at any tier, because ransoming security truth behind a plan would defeat its purpose.
The same engine runs everywhere, which matters more than it first appears. The CLI wraps identical rules against any connection string with CI-friendly exit codes; the probe runs from a browser with no account at all. A finding you reproduce locally will read the same in the dashboard — there is no hosted-only truth to reconcile, and teams who later move between plans or self-host the scanner lose nothing they already knew. That portability cuts both ways in the best sense: try the hosted dashboard while evaluating, keep the CLI in CI permanently, and treat both as views over one engine whose findings will not contradict each other between surfaces. It is the same scanner everywhere, which makes its findings boring in exactly the right way. Consistency across surfaces is what lets a team trust one number during an incident instead of reconciling three tools first.
Choose a monitoring plan
Monthly monitoring with alerts on transitions. Checkout goes live on August 31, 2026 — leave an email and we will tell you the moment it does.
RowShield Indie
or $290/yr
For one developer shipping fast.
- Up to 3 projects
- Hourly scans
- Email and Slack alerts
- 1 seat
- Full findings and remediation SQL
RowShield Team
or $990/yr
For a team that has customers to answer to.
- Up to 15 projects
- 15-minute scans
- Email, Slack, Discord and custom webhooks
- Unlimited team seats
- Full findings and remediation SQL
RowShield Growth
customFor agencies and platforms monitoring many customer projects.
We go live August 31, 2026
Enter your email and we’ll notify you the moment your plan goes live — the free audit is available today.
Founding customers (first 100) lock in 25% off annual forever.
Frequently asked
- How much does it cost?
- Indie covers 3 projects at hourly scans. Team covers 15 projects at 15-minute scans and adds Discord and custom webhooks. Current rates are on the pricing page, and annual billing costs ten times the monthly price. Findings and remediation SQL are never withheld by plan.
- What access does it need?
- A Postgres connection string for the project you want monitored. Grant it catalog read access only; it never selects from your tables.
- Can I self-host it?
- The scanner, probe and CLI run anywhere Node runs, against any connection string, with no RowShield service involved.
Check your project in about ten seconds
Paste a URL. No signup, no writes, nothing stored.
Run the free audit