All guidesComparisons
On this page

Supabase security tools

Supabase

Supabase security tools compared: what each one catches and misses

By Ohad Krispin, founder of VibeRaven · LinkedIn

No single tool covers a Supabase app, because each one reads only one layer of it. Start with the database you have deployed: Supabase's Security Advisor is built in and checks the policies, grants and functions that are actually live, including changes made in the dashboard. Then add a check of your migrations and code before each deploy, a scan of the deployed app from outside, and a secret scanner on every commit. The tools below are grouped by the layer they read, not ranked, and each is described from its own docs, read on 2026-10-22.

Diagram of the four layers of a Supabase app, code and migrations, the running database, the deployed app and secrets, with what a check at each layer catches and what it cannot see.
Diagram of the four layers of a Supabase app, code and migrations, the running database, the deployed app and secrets, with what a check at each layer catches and what it cannot see.

Checklist

Which tools cover which layer

  1. 01Code and migrations, before deploy: these read your repo, so they catch a bad migration before it reaches the database, and they cannot see tables or policies changed in the dashboard. rls-lint reads migration SQL offline (npx rls-lint ./supabase/migrations) and exits 1 on critical findings. supabase-security replays your migrations with no credentials (npx supabase-security migrations). The Supabase CLI runs the Advisor checks on your local database: apply your migrations with supabase db reset, then run supabase db advisors --local.
  2. 02Code and migrations, VibeRaven: an open source CLI for Vercel + Supabase apps (npx -y viberaven@1.6.12 check). On a fixture repo on 2026-10-22 it flagged a public table without RLS, an update policy using (true), a security definer function the anon key can call, a service role key in client code, a Stripe webhook with no signature check and an env var missing from .env.example. It is advice, not a gate, and a repository check, not a live database test: it does not connect to Supabase, Vercel or Stripe, so it cannot see live policies or how the app behaves at runtime, and a clean result does not prove the app is secure. It exits with code 1 when it finds a blocker and writes a .viberaven folder that it does not add to .gitignore.
  3. 03The running database: these read what is deployed, dashboard changes included, and cannot see a migration you have not applied. The Security Advisor runs in the dashboard, with supabase db advisors --linked, through the MCP get_advisors tool and through the Management API. pgTAP tests, run with supabase test db, set a user's role and JWT and assert which rows come back. Supashield checks each role's access against the results you expect in a policy.yaml file, inside transactions it rolls back. Supabomb lists what the anon key can reach; its README says to use it only for authorized testing.
  4. 04The deployed app, from outside: these start from your public URL, as a stranger would, and do not read your source or migrations. ZAP's baseline scan crawls the site and scans passively; its full scan runs real attacks, which ZAP says to point only at an app you have permission to test. Vibe App Scanner, RowShield and LeakScope are hosted scanners for Supabase apps that start from your app's URL and report the data a visitor can reach.
  5. 05Secrets, on every commit: these scan files and git history for keys and say nothing about RLS. Gitleaks runs as a CLI, a pre-commit hook or a GitHub Action. TruffleHog can also check whether a secret it finds still works. GitHub push protection rejects a push that contains a supported secret; its Supabase patterns include the secret key and personal access tokens, not the anon or publishable key.

Comparison

Supabase security tools, side by side

Free or paid and license are as each tool states them. A blank in a tool's docs is marked as not stated, not guessed.

All 15 tools in one table

Supabase security tools by layer, from each tool's own docs on 2026-10-22
ToolLayerWhat it catchesWhat it missesFree or paidOpen source
VibeRavenCode and migrationsTables without RLS, using (true) policies, security definer functions anon can call, service role key in client code, unsigned Stripe webhooksLive policies, dashboard changes, runtime behaviorFree CLIYes, MIT
rls-lintCode and migrationsTables created without RLS, using (true) or with check (true), grants of BYPASSRLS, FOR ALL policiesAnything outside migration files; it never connects to a databaseFreeYes, MIT
supabase-securityCode and migrations, and the live projectTables with RLS off and anon grants, anon-callable security definer functions, public buckets; its live audit probes with your anon keyStorage RLS per object, and which tables you meant to be public (its README); alphaFreeYes, MIT
supabase db advisors --localCode and migrationsThe Advisor checks, such as missing RLS policies and exposed auth.users, on your local database after supabase db resetChanges made on the live projectFree (Supabase CLI)Public source, no license file
Supabase Security AdvisorRunning databaseRLS off in public, RLS with no policy, always-true policies, views and security definer functions anon can useMigrations not applied yet; whether a policy returns the right rowsBuilt into SupabaseLint SQL public in supabase/splinter, no license file
pgTAPRunning databaseWhatever your tests assert, such as which rows a given user seesAnything you have not written a test forFreeYes, PostgreSQL-style license
SupashieldRunning databaseEach role's allow or deny on tables and storage, against your policy.yaml; policy lint, coverage, driftAccess you have not listed as expectedFreeYes, MIT
SupabombRunning database, through the APITables, columns, RPC functions, buckets, edge functions and auth settings the anon key reaches; anon vs signed-in RLSSource and migrations; for authorized testing onlyFreePublic source, no license file
ZAPDeployed appIssues found by crawling and passive scanning; active attacks in a full scan; API scans from an OpenAPI or GraphQL definitionSource, migrations and policy textFreeYes, Apache-2.0
Vibe App ScannerDeployed appMissing RLS, and tables, buckets, RPC and edge functions reachable with the anon key, in 150+ checksSource, migrations, vulnerable dependencies, secrets in git history (its own list)First scan free, then paid plansNot stated
RowShieldDeployed appTables the anon key can read, a service_role key in the client bundle; a daily audit once you connect a projectBefore you connect: RLS off on a table, always-true policies, public buckets (its own list)Free URL check and one project, then paidNot stated
LeakScopeDeployed appExposed credentials, public data access, weak RLS, IDOR, JWT weaknesses, insecure headersSource and migrationsFree light scan, no account; in betaNot stated
GitleaksSecretsSecrets in git history, folders and files, by pattern ruleData access and RLSFree; its GitHub Action needs a free key for organizationsCLI yes, MIT
TruffleHogSecretsOver 800 secret types, Supabase personal access tokens among them, and whether each still worksData access and RLSFree, with a paid enterprise productYes, AGPL-3.0
GitHub push protectionSecretsPushes that contain a supported secret, including a Supabase secret key or personal access tokenThe anon and publishable keys; a writer can bypass it with a reasonFree for public repos; private org repos need GitHub Secret ProtectionNo

Related

Sources

Sources behind this list

FAQ

FAQ for builders before launch

Which layer should I check first?

The running database. The Security Advisor ships with the Supabase platform and reads what is deployed, including changes made in the dashboard. Then add a migration check so the next change is caught before deploy, and a secret scanner, because Supabase's secret and service role keys bypass RLS.

Does a clean Security Advisor mean my RLS is right?

No. The Advisor runs fixed checks on your schema, and Supabase says some findings may be intentional. Whether a policy returns the right rows for each user takes a test that acts as that user: pgTAP with supabase test db, Supashield, or a request made as a second user on the deployed app.

Can a migration check see tables made in the Supabase dashboard?

No. Changes made on the remote database in the dashboard never reach your migration files. The Advisor, supabase-security's live audit and the outside scanners read the live project, so they see those tables.