Replies: 7 comments 7 replies
-
|
What is the corresponding setting in the config file for local dev? If I run a |
Beta Was this translation helpful? Give feedback.
-
|
So at 30 October you will patch existing table as well? What if I run grant bulk for existing table now? What happened at 30 October? |
Beta Was this translation helpful? Give feedback.
-
what should I look for in the |
Beta Was this translation helpful? Give feedback.
-
|
Will you update the dashboard app UI to display or update the grants on a table in a visual way? |
Beta Was this translation helpful? Give feedback.
-
|
Confirming grant behavior for existing projects and tables before/after the October 30 cutover My understanding:
Questions:
|
Beta Was this translation helpful? Give feedback.
-
Just to clarify for anyone worried about existing apps breaking on Oct 30:Existing tables in existing projects are not automatically affected because they already have the required grants. Supabase explicitly states that existing objects keep their current grants and remain reachable through the Data API. What changes after Oct 30 is:
So unless you create new tables after the rollout, your current tables should continue working normally. |
Beta Was this translation helpful? Give feedback.
-
|
I was told that two of my projects were mentioned in the email. Which ones? |
Beta Was this translation helpful? Give feedback.
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
New tables in the public schema will no longer be exposed to the Data API automatically.
When this change takes effect
publicschema are not exposed to the Data API and GraphQL API by default. You can enable this setting at project creation.Once the change is rolled out to your project, new tables you create in
publicschema require an explicit opt-in (via a Postgresgrant) before the Data API can see them. Existing tables are not affected in your project, they keep their current grants and stay reachable. This change applies to projects that use the Data API, Supabase's auto-generated REST and GraphQL layer, which is whatsupabase-jsand our other client libraries call. If your app reads and writes Postgres over a direct connection (via psql, ORM or an app server with a connection string), this change will not affect you.What's changing
Previously, when you create a Supabase project with default settings,
select,insert,update, anddeleteare granted to every table in thepublicschema to theanon,authenticatedandservice_roleroles. Every table you create becomes reachable via the Data API on creation.From today, the project creation screen includes a setting to opt out of those default grants. When the “Automatically expose new tables” checkbox is unchecked, you opt-in to the new behavior and tables aren’t exposed to the Data API by default. On May 30, 2026 the opt-out becomes the default for all new projects.
RLS behavior remains unchanged. Grants are a separate layer: they control whether a role can access a table at all, while RLS controls which rows that role can see.
If a grant is missing, PostgREST returns a clear error rather than a silent failure:
{ "code": "42501", "message": "permission denied for table your_table", "hint": "Grant the required privileges to the current role with: GRANT SELECT ON public.your_table TO anon;" }The hint shows you which role is missing which privilege, along with the
GRANTneeded to fix it.Before → After
publicgranttoanon/authenticated/service_rolegrantstatementalter table ... enable row level securitycreate policy ...Why
When Supabase launched, a human reviewed each schema change and enabled RLS on new tables as they went. The default grants made this convenient: create a table, and it showed up in your client.
That model doesn’t scale, and it’s easy to accidentally expose new tables before you’ve secured them.Today, agents, CLI scripts, and AI platforms create tables too, and many of those operations do not have a human reviewing the diff.
Explicit grants make access a deliberate, code-level decision. The PostgREST error response above includes a precise hint, so an agent can self-correct when a grant is missing instead of producing a broken request.
Without a
grant, the API cannot see the table, regardless of how you created it (SQL editor, migrations, Management API, MCP, CLI, or an AI coding tool). Postgres enforces this at the role layer, so the guarantee holds regardless of the creation path.We’re moving the platform toward declarative code. Explicit Postgres
grants are reviewable, diffable, and greppable. They also give you per-role control:anonandauthenticatedneed different privileges in most schemas, and an explicit grant makes that difference visible in your migrations. This was always possible, now it's the default.Currently, the default grants expose every table in
publicover the Data API on creation, including tables a developer forgot to protect.This is the next step in a series of platform default changes we have shipped over the past quarter:
Who is affected
You are unaffected if you only talk to your database over a direct Postgres connection--you can stop reading.
You need to act if any of the following is true:
publicschema via the Data API (PostgREST, GraphQL,supabase-js, any of the client libraries, or direct HTTP to/rest/v1/or/graphql/v1)publicwithout explicitGRANTstatements.The change reaches you on one of three dates:
Between now and then, Security Advisor will flag affected tables, and we’ll email active projects so you can review access, add grants, and verify your app.
What to do
For new tables you want to expose via the Data API, make explicit grants part of your table-creation flow. Without an explicit
GRANT, a role will not have access to the created table.Treat these three steps as a unit. If the grant is missing, Postgres rejects the query before RLS comes into play.
If you use an AI coding tool to create tables, update its system prompt or adopt the Supabase agent skill, which includes the grants step, and which we keep updated as the platform changes. Skills are easy to install, and handle grants correctly by default. Agents can self-correct from the PostgREST error hint returned as well.
If you run your own migration framework, or a platform that provisions Supabase projects for your own customers, bundle the
GRANTstatements alongside yourENABLE ROW LEVEL SECURITYand policy statements in the same migration.Opting in on existing projects
You do not have to wait for October 30. To adopt the new behavior on an existing project today, run the same revoke statements the dashboard runs at project creation.
Open the SQL Editor for your project and run:
These four statements change the defaults for future tables and sequences that the
postgresrole creates in thepublicschema.Existing objects keep their current grants, so your running app stays reachable.
From this point on, new tables you create in the
publicschema need explicitGRANTstatements before the Data API can see them.If you also want to tighten grants on existing tables you do not want reachable via the Data API, revoke them per table:
The Data API exposure badge in the Table Editor and the Security Advisor list the tables worth reviewing.
FAQ
Does this affect tables in the
storage,auth,realtime, or custom schemas?No. The change touches default privileges in the
publicschema. Tables instorage,auth,realtime, and any custom schemas you expose via the Data API keep their current grants and their current defaults.I opted in on an existing project, created new tables, and my app is broken. How do I roll back?
Open the SQL Editor and run two blocks.
1) Restore defaults for future tables
Future tables will now behave as they did before the revoke:
2) Fix existing tables
alter default privilegesonly affects future objects, so tables you created since the revoke stay without grants. Grant them in bulk:After running both blocks, your project matches the pre-revoke state. If you added tables you want to keep private, revoke those individually after the bulk grant:
Rollout timeline
GRANTstatementsCommunications timeline
We email owners and admins of every active project, including projects with no Security-Advisor-flagged tables today.
After October 30, any new table created in
publicwithout an explicitgrantstops being reachable via the Data API, so a project with no flagged tables today still breaks the first time someone adds a new one.From today through October 30, the Security Advisor flags affected tables per project and shows the remediation SQL, so you do not have to hunt for them yourself.
If you have a question, create a support ticket here.
Beta Was this translation helpful? Give feedback.
All reactions