Flujo de aprovisionamiento de una base de datos tenant
- El superadmin (o un flujo automático de alta de célula) dispara
POST /api/admin/celulas. - Un job en background (Hangfire) ejecuta contra el
masterde SQL Server la creación de la base de datos, la restricción de tamaño (MAXSIZE), y un login/usuario dedicado para esa base. - El resultado (nombre de base, connection string cifrada, fecha de creación) se registra en el catálogo.
- La cuenta de servicio usada para aprovisionar tiene permisos elevados (
CREATE DATABASE) y está completamente separada de las cuentas usadas para el tráfico normal de la API, que solo tienen permisos deEXECUTEsobre Stored Procedures.
CREATE DATABASE [tenant_alpha];
ALTER DATABASE [tenant_alpha] MODIFY FILE (NAME = tenant_alpha, MAXSIZE = 20MB);
CREATE LOGIN [login_alpha] WITH PASSWORD = '...';
USE [tenant_alpha];
CREATE USER [user_alpha] FOR LOGIN [login_alpha];
Por qué así
Aislar la cuenta de aprovisionamiento de la cuenta de tráfico normal aplica el principio de menor privilegio: si la API de negocio fuera comprometida (por ejemplo, vía un SP mal parametrizado), el atacante nunca tendría permisos para crear o eliminar bases de datos completas, solo para ejecutar los SPs autorizados de su propio tenant.