Aislamiento de datos multiinquilino: por qué «filtramos por cuenta» no es suficiente
Si administras propiedades para más de un propietario, o para más de una entidad legal, hay una pregunta que vale la pena hacer sobre cualquier software en el que introduzcas esos datos: ¿qué impide realmente que las finanzas del Propietario A aparezcan en algún lugar visible para el equipo del Propietario B? «Filtramos por cuenta en la interfaz» y «no es posible consultar entre cuentas» son respuestas muy distintas — y la diferencia importa más justo cuando algo sale mal, no cuando todo funciona como debería.
El filtrado a nivel de aplicación es una convención, no una garantía
La mayoría del software aísla los datos de los inquilinos añadiendo un filtro a cada consulta — «solo las filas donde company_id coincide». Eso funciona, hasta que una consulta en algún lugar del código se olvida del filtro: un nuevo endpoint, una consulta de reportes escrita con prisa, un proceso en segundo plano que recorre «todos» los registros en lugar de los de una sola empresa. Nada impone la regla, salvo que cada desarrollador la recuerde, cada vez, para siempre. Para una aplicación de un solo cliente, eso es un riesgo menor. Para un software que contiene los datos financieros y de inquilinos de varios propietarios, es una categoría de problema distinta.
Qué significa realmente el aislamiento a nivel de base de datos
La alternativa es hacer cumplir ese límite directamente en la base de datos — seguridad a nivel de fila (row-level security) de Postgres, en el caso de Casement — de modo que incluso una consulta que olvide filtrar por empresa simplemente no pueda ver las filas de otra empresa. No es una capa de restricción de interfaz añadida sobre una vista compartida de los datos; la propia base de datos se niega a devolverlas. Es una garantía notablemente más sólida que «se supone que la aplicación filtra esto», porque no depende de que cada línea de código de la aplicación esté bien escrita.
Por qué esto importa especialmente para los administradores de propiedades
- No eres el único propietario de los datos. A diferencia de un usuario típico de SaaS de una sola empresa, un administrador de propiedades que actúa para varios propietarios maneja habitualmente información financiera y de inquilinos de otras personas — lo que está en juego ante una filtración es de otra persona, no solo tuyo.
- Los propietarios preguntan. Un cliente propietario que evalúa si confiarle a un administrador los datos de su cartera tiene derecho a preguntar cómo están aislados de los de todos los demás — «se aplica a nivel de base de datos» es una respuesta concreta; «tenemos cuidado» no lo es.
Cómo gestiona esto Casement
Cada tabla de inquilinos en Casement lleva un identificador de empresa impuesto por la seguridad a nivel de fila de Postgres, no solo por filtrado a nivel de aplicación — y la capa de aplicación sigue filtrando explícitamente además de eso, como una segunda verificación en lugar de la única. No es la función más visible en una demo de producto, pero es la que sostiene a todas las demás.
Casement está incorporando actualmente a un pequeño número de empresas de administración de propiedades piloto. Si administras para más de un propietario, vale la pena preguntarlo directamente en una demo en vivo.