Backend · 8 min

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.