miércoles, 27 de mayo de 2009

Schemas separados en una arquitectura multitenant

Realicé una serie de pruebas para evaluar una arquitectura multitenant usando schemas separados (un schema por cada tenant). 

La idea general fue crear una clase de acceso a datos transparente que permita que cada usuario acceda solo a sus datos. De esta manera se simplifica el acceso a datos (una única clase para todos los tenants) y se asegura un esquema de seguridad.

Para ello, primero preparé una base de datos de prueba y tres schemas diferentes:
- SchemaApp: schema para las tablas del sistema compartidas por todos los tenants, por ej., usuarios, parámetros, datos de los tenants, etc.
- SchemaA y SchemaB: schemas que simulan los 2 tenants del sistema (TenantA y TenantB)

Luego agregué a cada schema sus respectivas tablas y stored procedures


Por último cree 3 logins (AppUser, TenantA, TenantB) para los accesos a la base de datos:
- AppUser: schema por default: SchemaApp
- TenantA y TenantB: schemas por default, SchemaA y SchemaB respectivamente

AppUser tiene acceso solo a su schema, y TenantA y TenantB (además de acceder a su schema) tienen acceso a AppSchema.

Una vez lista la base de datos, schemas, tablas, stored procedures, permisos, etc realicé la clase de acceso a datos:
- para acceder a los datos comunes de todos los tenants se usa el AppUser


- para acceder a los datos privados de cada tenant se usa el usuario respectivo

Esto permitió mostrar solo los datos de cada tenant (sin realizar modificaciones en el código de la clase de acceso a datos)



No hay comentarios:

Publicar un comentario