The Vulnerability You Ship Without RLS

When you create a table in Supabase and start building your app, there is a default behavior that surprises most developers when they discover it in production: without Row Level Security enabled, every row in your table is accessible to every authenticated (and sometimes anonymous) user via the Supabase JavaScript SDK.

Consider a SaaS application with a documents table where each row belongs to a specific user. Without RLS, any client-side call like this returns every document in the table — across all users:<