El problema real del tenant_id
El modelo de tenant_id tiene una vulnerabilidad sistémica que no se resuelve con más cuidado o con mejores tests: la separación depende de que cada query filtre correctamente.
En un sistema con decenas de endpoints, cientos de queries y múltiples desarrolladores trabajando en el tiempo, la probabilidad de que en algún momento alguien olvide el filtro de tenant_id es real. No es un problema hipotético — es un patrón de bug conocido en sistemas multi-tenant que ha causado incidentes de privacidad en productos conocidos.
Cuando ese bug ocurre en el modelo tenant_id, el daño puede ser masivo: datos de todos los tenants expuestos en una query que debería devolver solo datos de uno.
Con bases de datos separadas, el aislamiento es estructural. Un error en el código puede romper funcionalidad — un endpoint que devuelve un error, una query que retorna un resultado vacío. Pero no puede devolver datos del cliente equivocado, porque la conexión de base de datos está apuntando a la base del cliente correcto desde el middleware.