Seguridad a nivel de fila
Comprender e implementar la seguridad a nivel de fila (RLS) para proteger los datos.
Nota: Este es contenido de ejemplo/marcador de posición con fines de demostración.
La seguridad a nivel de fila (Row Level Security, RLS) es el sistema de autorización integrado de PostgreSQL que controla a qué filas de las tablas de la base de datos pueden acceder los usuarios.
¿Por qué RLS?
RLS ofrece varias ventajas:
- Seguridad a nivel de base de datos - Protección incluso si el código de la aplicación tiene errores
- Aplicación automática - No se necesitan comprobaciones de autorización manuales
- Aislamiento multiinquilino - Garantiza que los usuarios solo vean sus propios datos
- Rendimiento - Optimizado a nivel de base de datos
Habilitar RLS
Todas las tablas deben tener RLS habilitado:
ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;
Patrones de políticas habituales
Acceso a la cuenta personal
CREATE POLICY "Users can access their personal account data" ON your_table FOR ALL USING (account_id = auth.uid());
Acceso a la cuenta de equipo
CREATE POLICY "Users can access their team account data"
ON your_table FOR ALL
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid()
)
);
Permisos de lectura frente a escritura
-- Todos los miembros pueden leer
CREATE POLICY "Team members can view data"
ON your_table FOR SELECT
USING (account_id IN (SELECT get_user_accounts(auth.uid())));
-- Solo los propietarios pueden modificar
CREATE POLICY "Only owners can modify data"
ON your_table FOR UPDATE
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid() AND role = 'owner'
)
);
Probar las políticas RLS
Pruebe siempre sus políticas RLS para asegurarse de que funcionan correctamente:
-- Probar como un usuario específico SET request.jwt.claims.sub = 'user-uuid-here'; -- Intentar seleccionar datos SELECT * FROM your_table; -- Restablecer RESET request.jwt.claims.sub;
Omisión de RLS por el administrador
Las claves de service role omiten RLS. Úselas con extrema precaución e implemente siempre comprobaciones de autorización manuales cuando utilice el cliente de administrador.