You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Remove anon default table privileges on production #470
Production never ran 29-lint-hardening.sql §3, so anon still holds default table privileges on production tables outside the 2026-09-28 hand fix. #316 covers only objects created in the future.
Exposure: RLS still applies to every table that has it on, so anon reads stay limited by policy. The gap is any table without RLS, and any future table that ships without its own revoke.
Prod check after the 2026-10-19 db push (read-only)
Migration 20261014121200_revoke_anon_default_table_privileges is applied on prod.
After:check-grants.sql shows no anon_write row and no anon_read_not_allowed row. Anon reads only the allowlisted tables, and it writes to no table in public.
Before: no listing was posted here before the push, and it cannot be taken now. The earlier prod state is in the 2026-09-28 review on #327.
What remains: the default privileges for new objects (pg_default_acl) still grant anon on public. That is #316, by design, and check-grants.sql expects those default_acl_anon rows until #316 lands.
Activity
HMarzban commentedon Oct 15, 2026
Related issues
db push#317 — Related: Add a read-only grant guard to run after eachdb push#317 listsanon_writeandanon_read_not_allowedon prod with no owner. This issue owns them. The Add a read-only grant guard to run after eachdb push#317 guard can prove the fix before and after.Cross-link review, 2026-10-15. Generated by Claude Code
fix(supabase): harden grants and notification gates
HMarzban commentedon Oct 19, 2026
Prod check after the 2026-10-19
db push(read-only)Migration
20261014121200_revoke_anon_default_table_privilegesis applied on prod.After:
check-grants.sqlshows noanon_writerow and noanon_read_not_allowedrow. Anon reads only the allowlisted tables, and it writes to no table inpublic.Before: no listing was posted here before the push, and it cannot be taken now. The earlier prod state is in the 2026-09-28 review on #327.
What remains: the default privileges for new objects (
pg_default_acl) still grant anon onpublic. That is #316, by design, andcheck-grants.sqlexpects thosedefault_acl_anonrows until #316 lands.