Matt Turley, Continuum. Updated November 5, 2026.
What the rule does in plain words, when you need it, and the mistakes AI tools make writing it.
Row level security is a rule on a database table that decides which rows each user may read or change. If your app uses Supabase from the browser and holds more than one person’s data, you need it on every table. Without it, the public key can read what you meant to protect.
A table of orders holds every customer’s orders. Row level security adds a rule such as: a signed-in user may see only rows where the owner is themselves. The database enforces it on every request, so even a hand-made request from outside the app cannot get around it.
It matters most in setups where the browser talks to the database directly, which is how many AI-built apps on Supabase work. There the rule is not an extra layer; it is the lock. See Supabase’s own explanation.
The most common is leaving it off, because everything works without it. The next is switching it on, seeing the app go blank because no rules exist, and adding a rule that simply allows everyone, which reopens the table while looking fixed. Another is using the service role key from the browser, which skips the rules altogether.
In our October scan, 31 of 177 Supabase-backed apps built with Lovable, Bolt or base44 had at least one table answering with no login. The dataset is public.
List your tables, confirm the rules are on for each, read every policy in plain words, and test with a request that carries no login. The Supabase security review does this with a written proof for each finding, and the free production-readiness check tests rule enforcement on a live URL.
Paste your live app URL and your email. A short automated check runs three public-security spot-checks and sends back one specific finding and what to do about it. It is free, and it is a preview, never a clean bill of health.
Run the free is-it-safe-to-ship check. Or book a call and talk it through.