Glosario
Row Level Security (RLS)
También: Seguridad a nivel de fila
Row Level Security es la capacidad del motor de base de datos de decidir, fila por fila, qué registros puede ver o modificar cada conexión. La regla vive en la base y no en el código de la aplicación, así que se aplica aunque una consulta olvide filtrar.
En una plataforma que atiende a muchas organizaciones sobre infraestructura común, lo que impide que los datos de una lleguen a otra no debería ser que la aplicación se acuerde de agregar un filtro. Ese modelo funciona hasta el día en que alguien escribe un endpoint nuevo y omite una cláusula, que es un error humano ordinario con una consecuencia desproporcionada.
RLS mueve la garantía al motor. Cada tabla lleva políticas que el propio motor evalúa antes de devolver una fila. En modo forzado —la variante que importa— ni siquiera el propietario de la tabla evade esas políticas, lo que obliga a una condición que suele olvidarse: el rol con el que la aplicación se conecta no debe ser propietario de ninguna tabla, y las migraciones deben correr con un rol distinto. Sin esa separación, el modo forzado no protege nada.
Dos detalles de implementación deciden si el control es real. Las políticas se definen por operación, con verificación explícita en las de escritura: sin eso se puede insertar una fila atribuida a otra organización, con la lectura protegida y la escritura no. Y el identificador de organización se fija por transacción, como parámetro y nunca por interpolación de texto, de modo que una consulta sin ese contexto devuelva cero filas en lugar de todas.
El comportamiento por defecto es lo que hace verificable el diseño: un olvido produce un resultado vacío, no una fuga. Una batería de pruebas dedicada a intentar cruzar la separación —dos organizaciones sintéticas recorriendo cada punto de acceso— es lo que confirma que sigue siendo cierto después de cada cambio.
Preguntas frecuentes
¿Qué es RLS en una base de datos?
RLS (Row Level Security) es la capacidad del motor de base de datos de decidir, fila por fila, qué registros puede ver o modificar cada conexión. La regla vive en la base y no en el código de la aplicación.
¿Qué es una política RLS?
Es la regla que lleva cada tabla y que el propio motor evalúa antes de devolver una fila. Las políticas se definen por operación, con verificación explícita en las de escritura.
¿Qué es el modo forzado de RLS?
Es la variante en la que ni siquiera el propietario de la tabla evade las políticas. Exige que el rol con el que la aplicación se conecta no sea propietario de ninguna tabla y que las migraciones corran con un rol distinto.
¿Por qué usar RLS en vez de filtrar en la aplicación?
Porque con RLS un olvido produce un resultado vacío y no una fuga: se aplica aunque una consulta omita el filtro. Filtrar en la aplicación depende de que cada endpoint nuevo se acuerde de agregarlo.