glossary
Missing Data Retention Policy
Missing Data Retention Policy is a Supabase security risk where sensitive data is kept indefinitely without lifecycle controls, . This page explains it in plain English, then goes deeper into how it works in Supabase/Postgres, what commonly goes wrong, and how to fix it without relying on fragile client-side rules.
What “Missing Data Retention Policy” means (plain English)
Missing Data Retention Policy happens when sensitive data is kept indefinitely without lifecycle controls. In simple terms, the app looks protected in the UI, but the database or API boundary still allows behavior an attacker can trigger directly. In Supabase projects, this usually shows up when grants, policies, and backend enforcement are not aligned.
How Missing Data Retention Policy works in Supabase/Postgres (technical)
Missing Data Retention Policy is typically rooted in a mismatch between Postgres privileges, Row Level Security policy semantics, and request paths exposed through PostgREST, RPC, Storage, or Edge Functions. Attackers bypass frontend constraints and call the exposed API surface directly with anon or authenticated credentials. Effective remediation combines least-privilege grants, explicit server-side authorization, strict input constraints, and repeatable verification queries after every migration.
Attack paths & failure modes for Missing Data Retention Policy
- Missing Data Retention Policy: direct API bypass: A frontend flow appears restricted, but an attacker calls the same endpoint or table path directly with client credentials. Because Missing Data Retention Policy is not fully mitigated, unauthorized reads or writes succeed outside intended app behavior.
- Missing Data Retention Policy: migration drift regression: Security controls were corrected in a prior release, but a later schema migration introduced a new object or permission path. The change unintentionally recreated Missing Data Retention Policy and restored an exploitable access route.
- Missing Data Retention Policy: direct API bypass: Authorization relied on UI logic and partial policy checks instead of a strict backend boundary. Grants and execution paths still allowed access in ways that were never intended for untrusted clients.
- Missing Data Retention Policy: migration drift regression: The migration process lacked security guardrails for new tables, functions, and grants. Changes merged successfully, but no automated checks validated least-privilege posture post-deploy.
- The configuration doesn’t match what the UI implies (direct API access bypasses the app).
- Policies/grants drift over time and widen access without anyone noticing.
- Fixes are applied without verification, leading to false confidence.
Why Missing Data Retention Policy matters for Supabase security
When Missing Data Retention Policy exists, incidents are rarely noisy at first: data access may look like normal traffic until a full extraction or unauthorized mutation is already underway. This risk compounds over time because schema changes and new features reintroduce similar paths unless there is a deterministic hardening workflow. Closing this gap protects user trust, reduces legal/compliance exposure, and prevents expensive emergency rotations or rollbacks.
Common Missing Data Retention Policy mistakes that lead to leaks
- Assuming Missing Data Retention Policy is prevented by frontend checks alone, even though direct API calls can bypass UI logic completely in production conditions.
- Applying one-off fixes without adding repeatable verification steps, so the same exposure returns after migrations or refactors.
- Keeping broad grants or permissive function access because it is convenient during development, then forgetting to tighten it before release.
- Missing Data Retention Policy: direct API bypass: Authorization relied on UI logic and partial policy checks instead of a strict backend boundary. Grants and execution paths still allowed access in ways that were never intended for untrusted clients.
- Missing Data Retention Policy: migration drift regression: The migration process lacked security guardrails for new tables, functions, and grants. Changes merged successfully, but no automated checks validated least-privilege posture post-deploy.
Where to look for Missing Data Retention Policy in Supabase
- Your grants, policies, and any direct client access paths.
- Storage and RPC settings (common blind spots).
How to detect Missing Data Retention Policy issues (signals + checks)
Use this as a quick checklist to validate your current state:
- Try the same queries your frontend can run (anon/authenticated). If sensitive rows come back, you have exposure.
- Verify RLS is enabled and (for sensitive tables) forced.
- List policies and look for conditions that don’t bind rows to a user or tenant.
- Audit grants to
anon/authenticatedon sensitive tables and functions. - Missing Data Retention Policy: direct API bypass: Never treat frontend checks as authorization.
- Missing Data Retention Policy: direct API bypass: Test direct API access, not only UI paths.
- Missing Data Retention Policy: direct API bypass: Use backend-only patterns for sensitive actions.
- Re-test after every migration that touches security-critical tables or functions.
How to fix Missing Data Retention Policy (backend-only + zero-policy posture)
Mockly’s safest default is backend-only access: the browser should not query tables, call RPC, or access Storage directly.
- Decide which operations must remain client-side (often: none for sensitive resources).
- Create server endpoints (API routes or server actions) for required reads/writes.
- Apply hardening SQL: enable+force RLS where relevant, remove broad policies, and revoke grants from client roles.
- Generate signed URLs for private Storage downloads on the server only.
- Re-run a scan and confirm the issue disappears.
- Add a regression check to your release process so drift doesn’t reintroduce exposure. Fixes that worked in linked incidents:
- Missing Data Retention Policy: direct API bypass: The team moved sensitive logic to backend-only endpoints, tightened grants, and added explicit ownership checks plus repeatable security verification queries.
- Missing Data Retention Policy: migration drift regression: The team added migration-time security checks, policy and grant audits in CI, and a mandatory rollback-safe verification checklist for each release.
Verification checklist for Missing Data Retention Policy
- Attempt direct access using client credentials and confirm it fails.
- Apply a backend-only fix pattern and verify end-to-end behavior.
- Re-run a scan after changes and after the next migration.
- Missing Data Retention Policy: direct API bypass: Never treat frontend checks as authorization.
- Missing Data Retention Policy: direct API bypass: Test direct API access, not only UI paths.
- Missing Data Retention Policy: direct API bypass: Use backend-only patterns for sensitive actions.
- Missing Data Retention Policy: direct API bypass: Re-run security checks after each migration.
- Missing Data Retention Policy: migration drift regression: Security regressions often happen in migrations.
SQL sanity checks for Missing Data Retention Policy (optional, but high signal)
If you prefer evidence over intuition, run a small set of SQL checks after each fix.
The goal is not to memorize catalog tables — it’s to make sure the access boundary you intended is the one Postgres actually enforces:
- Confirm RLS is enabled (and forced where appropriate) for tables tied to this term.
- List policies and read them as plain language: who can do what, under what condition?
- Audit grants for anon/authenticated and PUBLIC on the tables, views, and functions involved.
- If Storage is involved: review bucket privacy and policies for listing/reads.
- If RPC is involved: review EXECUTE grants for functions and whether privileged functions are server-only.
Pair these checks with a direct API access test using client credentials. When both agree, you can ship the fix with confidence.
Over time, keep a small “query pack” for the checks you trust and run it after every migration. That’s how you prevent quiet regressions.
Prevent Missing Data Retention Policy drift (so it doesn’t come back)
- Add a repeatable checklist and re-run it after schema changes.
- Prefer backend-only access for sensitive resources.
- Keep one reusable verification test for “Missing Data Retention Policy: direct API bypass” and rerun it after every migration that touches this surface.
- Keep one reusable verification test for “Missing Data Retention Policy: migration drift regression” and rerun it after every migration that touches this surface.
Rollout plan for Missing Data Retention Policy fixes (without breaking production)
Many hardening changes fail because teams revoke direct access first and only later discover missing backend paths.
Use this sequence to reduce both risk and outage pressure:
- Implement and verify the backend endpoint or server action before permission changes.
- Switch clients to that backend path behind a feature flag when possible.
- Then revoke direct client access (broad grants, permissive policies, public bucket reads, or broad EXECUTE).
- Run direct-access denial tests and confirm authorized backend flows still succeed.
- Re-scan after deployment and again after the next migration.
This turns security fixes into repeatable rollout mechanics instead of one-off emergency changes.
Incident breakdowns for Missing Data Retention Policy (real scenarios)
Missing Data Retention Policy: direct API bypass
Scenario: A frontend flow appears restricted, but an attacker calls the same endpoint or table path directly with client credentials. Because Missing Data Retention Policy is not fully mitigated, unauthorized reads or writes succeed outside intended app behavior.
What failed: Authorization relied on UI logic and partial policy checks instead of a strict backend boundary. Grants and execution paths still allowed access in ways that were never intended for untrusted clients.
What fixed it: The team moved sensitive logic to backend-only endpoints, tightened grants, and added explicit ownership checks plus repeatable security verification queries.
Why the fix worked: The fix removes client trust, enforces least privilege at the database boundary, and validates behavior with direct-access tests that mirror attacker behavior.
Key takeaways:
- Never treat frontend checks as authorization.
- Test direct API access, not only UI paths.
- Use backend-only patterns for sensitive actions.
- Re-run security checks after each migration.
Read full example: Missing Data Retention Policy: direct API bypass
Missing Data Retention Policy: migration drift regression
Scenario: Security controls were corrected in a prior release, but a later schema migration introduced a new object or permission path. The change unintentionally recreated Missing Data Retention Policy and restored an exploitable access route.
What failed: The migration process lacked security guardrails for new tables, functions, and grants. Changes merged successfully, but no automated checks validated least-privilege posture post-deploy.
What fixed it: The team added migration-time security checks, policy and grant audits in CI, and a mandatory rollback-safe verification checklist for each release.
Why the fix worked: By treating security posture as part of deployment quality gates, regressions are caught before release and drift no longer accumulates silently over time.
Key takeaways:
- Security regressions often happen in migrations.
- CI should validate grants and policies automatically.
- Release checklists need direct-access testing steps.
- Track security state before and after schema changes.
Read full example: Missing Data Retention Policy: migration drift regression
Real-world examples of Missing Data Retention Policy (and why they work)
- Missing Data Retention Policy: direct API bypass — A real-world pattern where Missing Data Retention Policy is exploited through direct API calls that bypass frontend assumptions and expose sensitive operations.
- Missing Data Retention Policy: migration drift regression — A migration introduces drift that reopens Missing Data Retention Policy despite earlier hardening, creating a realistic regression path in production.
Related terms
- PII in Analytics Events →
/glossary/pii-in-analytics-events - Incomplete GDPR Delete Flow →
/glossary/incomplete-gdpr-delete-flow
FAQ
Is Missing Data Retention Policy enough to secure my Supabase app?
It’s necessary, but not sufficient. You also need correct grants, secure Storage/RPC settings, and a backend-only access model for sensitive operations.
What’s the quickest way to reduce risk with Missing Data Retention Policy?
Remove direct client access to sensitive resources, enable/force RLS where appropriate, and verify via a repeatable checklist that anon/authenticated cannot query what they shouldn’t.
How do I verify the fix is real (not just a UI change)?
Attempt direct API queries using the same client credentials your app ships. If the database denies access (401/403) and your backend endpoints still work, your fix is effective.
Next step
Want a quick exposure report for your own project? Run a scan in Mockly to find public tables, storage buckets, and RPC functions — then apply fixes with verification steps.
Explore related pages
cross
Remove over-permissive RLS policies (adopt deny-by-default)/templates/access-control/remove-over-permissive-policies