The Supabase change of 30 October 2026
New tables in public need explicit grants. Dates, scope and the SQL in one place.
Rollout dates
| Date | What happens | Who it reaches |
|---|---|---|
| 2026-04-28 | Changelog published. A setting at project creation lets you turn automatic exposure off. | New projects that opt in |
| 2026-05-30 | The new behavior becomes the default for all new projects (gradual rollout over a few weeks). | New projects |
| 2026-10-30 | The new behavior is enforced on all existing projects. | Every project that uses the Data API |
Notices Supabase said it would send
| Date | Channel | Audience |
|---|---|---|
| 2026-04-28 | Changelog post | Public |
| 2026-05-07 | April monthly newsletter | All subscribers |
| 2026-05-13 | Email: first notice of the May 30 change | Owners and admins of all active projects |
| 2026-05-27 | Email: final reminder before May 30 | Owners and admins of all active projects |
| 2026-09-23 | Email: five-week notice before October 30 | Owners and admins of all active projects |
| 2026-10-23 | Email: final notice, one week before | Owners and admins of all active projects |
Dates are from the Supabase changelog post published 2026-04-28, read 2026-11-10. We have not seen an official post confirming that the 2026-10-30 step finished for every project, so check your own project with this query.
Who has to act
- Your app reads or writes
publictables through the Data API: PostgREST, GraphQL,supabase-jsor direct HTTP to/rest/v1/. - Your migrations create tables in
publicwithoutgrantstatements. - A coding tool, script or API call creates tables and expects them to be reachable at once.
You are not affected if you only use a direct Postgres connection.
What Supabase runs to switch a project over
alter default privileges for role postgres in schema public
revoke select, insert, update, delete on tables from anon, authenticated, service_role;
alter default privileges for role postgres in schema public
revoke usage, select on sequences from anon, authenticated, service_role;
These change defaults for future tables and sequences only. Existing objects keep their grants.
What each new table needs
-- public.your_table: owner only
alter table public.your_table enable row level security;
revoke all on table public.your_table from anon, authenticated;
grant select, insert, update, delete on table public.your_table to authenticated;
grant select, insert, update, delete on table public.your_table to service_role;
drop policy if exists your_table_select_own on public.your_table;
create policy your_table_select_own on public.your_table
for select to authenticated
using ( (select auth.uid()) = user_id );
drop policy if exists your_table_insert_own on public.your_table;
create policy your_table_insert_own on public.your_table
for insert to authenticated
with check ( (select auth.uid()) = user_id );
drop policy if exists your_table_update_own on public.your_table;
create policy your_table_update_own on public.your_table
for update to authenticated
using ( (select auth.uid()) = user_id )
with check ( (select auth.uid()) = user_id );
drop policy if exists your_table_delete_own on public.your_table;
create policy your_table_delete_own on public.your_table
for delete to authenticated
using ( (select auth.uid()) = user_id );Write the fix for your tables
One table is free. The whole schema with a rollback file is $9 one-time, free during launch.
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.
Parsed in your browser. Your SQL is never uploaded, and no site or database is scanned.
Questions
Did existing tables lose access on October 30?
No. The changelog says existing tables keep their current grants and stay reachable. The first table you add afterwards is the one that fails.
Can I go back to the old behavior?
Supabase documents SQL that restores the old defaults. See restore automatic exposure and read the trade-off first.
Sources
Related
- Lovable app says "permission denied for table"The new table has no grants. Paste it below and copy a fix prompt made for Lovable.
- Go back to automatic exposureSupabase documents the SQL. Read what it re-opens before you run it.
- Local tables missing grants after db resetA reset replays your migrations. Without grants in them, tables come back closed.
- Every cause of 42501 on Supabase42501 means "insufficient privilege". Match your message to a row.