Row Level Security en Supabase: guía práctica para SaaS
Aislar datos entre clientes es una de las decisiones de arquitectura más críticas en cualquier SaaS. RLS lo hace a nivel de base de datos.
Carlos Copisrad · 8 mayo 2026
Qué es Row Level Security
RLS es una feature de PostgreSQL que permite definir políticas de acceso a nivel de fila directamente en la base de datos. Con Supabase, se activa con un ALTER TABLE y se configura con políticas SQL que se evaluan en cada query.
Implementación básica para multi-tenant
-- Habilitar RLS en la tabla
ALTER TABLE proyectos ENABLE ROW LEVEL SECURITY;
-- Política: solo ver proyectos del propio tenant
CREATE POLICY ver_propios ON proyectos
FOR SELECT
USING (tenant_id = auth.jwt() ->> 'tenant_id');Patrón recomendado: columna tenant_id
Cada tabla que contenga datos de cliente debe tener una columna tenant_id. Al crear la política, se compara contra el claim del JWT del usuario autenticado. Supabase inyecta ese JWT automáticamente en cada request desde el cliente.
Rendimiento: ¿RLS es lento?
No si se indexa correctamente. El índice en tenant_id es obligatorio. Con él, PostgreSQL convierte la política en un filtro eficiente que se aplica antes del scan.
CREATE INDEX idx_proyectos_tenant ON proyectos(tenant_id);Testing de políticas
-- Simular un usuario específico
SET LOCAL role = 'authenticated';
SET LOCAL request.jwt.claims = '{"tenant_id": "acme-corp"}';
SELECT * FROM proyectos; -- Solo debe ver filas de acme-corp¿Necesitás implementar RLS en tu aplicación? Contanos tu caso. Revisamos tu arquitectura sin costo.