Rowpass 42501: permission denied for table Not affiliated with Supabase

Rowpass / Guides

All 30 Supabase advisor lints

Name, level and one-line summary for every lint, 0001 to 0030.

LintLevelSummaryFix on this site
0001_unindexed_foreign_keysINFOUnindexed foreign keysNot covered here
0002_auth_users_exposedERRORUser data exposed through a viewNot covered here
0003_auth_rls_initplanWARNSlow security policy detectedNot covered here
0004_no_primary_keyINFOTable has no primary keyNot covered here
0005_unused_indexINFOUnused index foundNot covered here
0006_multiple_permissive_policiesWARNMultiple permissive policies on a tableNot covered here
0007_policy_exists_rls_disabledINFOSecurity policy not enforcedGrants vs RLS
0008_rls_enabled_no_policyINFONo access rules definedPolicy per command
0009_duplicate_indexWARNDuplicate index foundNot covered here
0010_security_definer_viewERRORView bypasses row-level securityViews and security_invoker
0011_function_search_path_mutableWARNUnsecured function search pathNot covered here
0012_auth_allow_anonymous_sign_insINFOAnonymous sign-ins enabledNot covered here
0013_rls_disabled_in_publicERRORTable publicly accessibleOwner-only SQL
0014_extension_in_publicWARNExtension installed in public schemaNot covered here
0015_rls_references_user_metadataERRORSecurity policy relies on user-editable dataNot covered here
0016_materialized_view_in_apiWARNMaterialized view exposed in APINot covered here
0017_foreign_table_in_apiWARNForeign table exposed in APINot covered here
0018_unsupported_reg_typesWARNColumn type blocks Postgres upgradesNot covered here
0019_insecure_queue_exposed_in_apiERRORQueue exposed without protectionNot covered here
0020_table_bloatWARNExcess table bloat detectedNot covered here
0021_fkey_to_auth_uniqueERRORForeign key blocks Auth upgradesNot covered here
0022_extension_versions_outdatedWARNExtension out of dateNot covered here
0023_sensitive_columns_exposedERRORSensitive data publicly accessibleNot covered here
0024_permissive_rls_policyWARNSecurity policy allows unrestricted accessPolicy per command
0025_public_bucket_allows_listingWARNDetects public storage buckets whose broad SELECT policies on storage.objects make their contents listable.Not covered here
0026_pg_graphql_anon_table_exposedWARNThis object is visible in your GraphQL schema to anyone using the public anon key.Check table grants
0027_pg_graphql_authenticated_table_exposedWARNThis object is visible in your GraphQL schema to signed-in users.Check table grants
0028_anon_security_definer_function_executableWARNThis SECURITY DEFINER function is callable without signing in.Function execute grants
0029_authenticated_security_definer_function_executableWARNThis SECURITY DEFINER function is callable by signed-in users.Function execute grants
0030_autovacuum_disabledINFODetects tables where autovacuum_enabled=false has been set as a storage parameter.Not covered here

Names, levels and summaries are copied from the lint documentation in the splinter repository (main branch) on the date under Sources. The dashboard may show a different release. "Not covered here" means the lint is outside what this site deals with, not that it is unimportant.

Count by level

LevelLints
ERROR7
WARN16
INFO7

No lint means "this table has no grant"

None of the 30 names describes a table that is missing its grants. A missing grant is not a security hole: it shows up as a 42501 error when your app calls the table. The lints point the other way, at objects that are reachable and should not be. Supabase's changelog says the Security Advisor flags tables affected by the 2026 change; we could not tell from the lint list which lint does that.

Run the lints yourself

The Security Advisor is in the dashboard. Supabase's docs also list a CLI command, supabase db advisors. For a plain list of every table with its grants and row level security state, use the free audit query.

Write the fix for your tables

One table is free. The whole schema with a rollback file is $9 one-time.

 

Waiting for a paste.

    Who can reach each table

    Your tables show up here, one row each, with a choice of who can reach them.

    The SQL appears here as soon as a table is found.

    Parsed in your browser. Your SQL is never uploaded, and no site or database is scanned.

    Questions

    Which lints are errors?

    0002_auth_users_exposed, 0010_security_definer_view, 0013_rls_disabled_in_public, 0015_rls_references_user_metadata, 0019_insecure_queue_exposed_in_api, 0021_fkey_to_auth_unique, 0023_sensitive_columns_exposed.

    Does granting a table to anon trigger a lint?

    Granting alone is not one of the 30 names. A table in public with row level security off is lint 0013, and a table anon can select is visible in GraphQL introspection per lint 0026. Grant, enable row level security and add policies together.

    Sources

    Related

    Did it fix your error?