FREE TOOL
Supabase 42501 “permission denied for table”: make the GRANT for your table
Type your table name, pick who needs access, and copy the SQL. Paste it into the Supabase SQL Editor and run it. With the default ticks, these are the statements Supabase published for its 30 October 2026 change, filled in with your table name.
If your error says new row violates row-level security policy, that is a different problem: the
grant is fine and a policy is blocking the row. See
Data won’t save? Row level security.
Runs in your browser. The table name you type is not sent to us.
1. Your table
Use the name from your error message, for example: permission denied for table orders
2. Who needs access
| Role | select | insert | update | delete |
|---|---|---|---|---|
| anon | ||||
| authenticated | ||||
| service_role |
The defaults match the example in Supabase’s changelog. Keep anon ticked only if
signed-out visitors should be able to read the table. Supabase says to grant the minimum privileges each role
needs (Securing your API).
3. Your SQL
Tick at least one box to see the SQL.
- Open your project in the Supabase dashboard and open the SQL Editor.
- Paste the SQL, read it, and run it.
- Step 3 is Supabase’s example. It assumes your table has a
user_idcolumn. Change it to the policy your app needs. Supabase says to treat grant, RLS and policy as one unit (Supabase changelog). - If your table has an auto-numbered column, Supabase says new sequences also need explicit grants. Read the changelog before you add them. This tool does not write sequence statements.
Check what you already have
Run this in the SQL Editor to see which roles can reach the table (Supabase: 42501 errors):
Which 42501 do you have?
Both errors carry code 42501. Read the message.
- Missing grant (this tool):
permission denied for table your_table. The role cannot reach the table at all. Fix: run the SQL above. - RLS blocking the row:
new row violates row-level security policy for table "your_table". The role can reach the table, but a policy rejects this row. Fix: add or correct a policy (read this guide).
The RLS message text comes from a Supabase GitHub discussion, not from the documentation.
The full explanation is in our guide: Supabase “permission denied for table” (42501) after 30 Oct 2026.
Then test it as a stranger
Open your live app in a private window, sign up with a fresh email, and do the thing that was failing. If it works, the grant is in place.
VibeFix’s check covers the sign-up part of this: its AI agent signs up to your live app like a new person and shows whether sign-up and your pages work. It does not look inside your Supabase project or read your grants. VibeFix checks; it does not fix your app.
FAQ
Why do I need this?
Supabase applies a change to all existing projects on 30 October 2026:
new tables in the public schema need an explicit Postgres grant before the Data API can
see them. Without it, the API returns 42501 permission denied for table. Projects created from
30 May 2026 already work this way.
Do I need to change tables I already have?
No. Existing tables keep their current grants and
stay reachable.
Is 42501 always a missing grant?
No. Supabase says that anon or
authenticated doing an INSERT or UPDATE without the needed RLS permission also returns a
42501 error. Read the message text.
Do I still need RLS after the grant?
Yes. Grants decide whether a role can reach the table;
RLS decides which rows. Supabase says to treat the three steps as a unit.
Is my table name sent to VibeFix?
No. The SQL is built in your browser by a script on this
page.
This tool writes SQL from the statements Supabase published in its changelog. It does not connect to your project and cannot know what your app needs. Read the SQL before you run it, and compare it with Supabase’s current docs. Last checked: 17 October 2026.
VibeFix is independent. Lovable, Bolt, Replit, Base44, v0 and Supabase are trademarks of their owners.