Row-Level Security para aplicar políticas por fila, aislar tenants y combinar contexto de sesión, roles y permisos sin confiar solo en filtros de aplicación.
Última actualización
Actualizada
Nivel
Profundización
Row-Level Security agrega una política de visibilidad y escritura por fila. Es una defensa potente para multi-tenancy, pero solo funciona si roles, variables de sesión, pooling, ownership y pruebas están diseñados como un sistema completo.
Cuando RLS está habilitado y no existe policy aplicable, el acceso de roles sujetos a RLS se niega. Esto es preferible a una política permisiva accidental.
Las policies permisivas suelen combinarse con OR. Las restrictivas se combinan con AND sobre el resultado permisivo. Esto permite separar tenant, estado o compliance, pero una combinación mal entendida puede abrir o cerrar acceso inesperadamente.
RLS se aplica a cada tabla accedida. Una fila parent visible no vuelve visible automáticamente sus children. Las joins pueden perder coincidencias porque una tabla relacionada está filtrada por su propia policy.
Esto puede ser correcto o indicar policies inconsistentes.
impide insertar una fila para otro tenant aunque el SQL envíe ese ID.
También puedes evitar que el cliente suministre tenant y derivarlo mediante una función segura o columna/default, pero revisa search path y privileges.
Cada job debe establecer tenant explícitamente o usar un role con policy apropiada. Un worker multi-tenant que olvida cambiar contexto puede operar con el tenant anterior si usa session state inseguro.
El role owner puede bypassar RLS y tocar todas las filas. Esto es útil, pero peligroso. Los scripts deben filtrar explícitamente, registrar alcance y probarse con datos de varios tenants.