Saltar al contenido principal

Base de datos

Dos instancias de MySQL en Cloud SQL, cada una en su proyecto.

InstanciaProyectoVersiónTamañoDisco
mysql8produccion-ucicMySQL 8.0.314 vCPU / 20 GB287 GB
test-mysql8testing-ucicMySQL 8.0.401 vCPU / 3.8 GB216 GB

Las versiones no coinciden: producción corre 8.0.31 y pruebas 8.0.40. Probar contra una versión más nueva que la de producción significa que algo puede funcionar en pruebas y fallar al desplegar, no al revés.

Las bases de producción​

prd_portal prd_nexo
prd_portal_moodle moodleprd
prd_foquita prd_futuro99
prd_entrenate_online_contribuye testing_moodle
testing_futuro99

Hay dos bases con prefijo testing_ dentro de la instancia de producción. Comparten CPU, memoria y disco con lo que atiende a los usuarios: una consulta pesada de pruebas se nota en producción.

La base de Nexo​

Todo el portal vive en prd_nexo, y ahí está la decisión que más conviene entender:

El portal y el módulo de TI comparten la misma base. nexo-hub-backend es dueño de las tablas de identidad (ti_usuarios, ti_tokens); nexo-ti-backend las lee.

Se eligió así frente a las alternativas —que el módulo pregunte al portal por HTTP, o repartir un JWT firmado— por una razón concreta: la revocación es inmediata. Si se desactiva a alguien, el módulo lo ve en la siguiente consulta. Con un JWT habría que esperar a que venza; con introspección por HTTP, el portal se vuelve un punto único de fallo para todos los módulos.

El precio: los dos servicios están atados al mismo esquema, así que renombrar una de esas tablas obliga a desplegar los dos a la vez.

Deuda conocida

Las tablas se llaman ti_usuarios y ti_tokens por un accidente de orden: el módulo de TI fue el primero que tuvo autenticación real, y las creó él. Hoy son del portal y el prefijo miente. Renombrarlas exige un despliegue coordinado.

Permisos​

El usuario prd_nexo se creó con ALL PRIVILEGES ON *.*, o sea permiso sobre todas las bases de la instancia, incluidas las de Aprendix y Moodle. Debería tener permiso completo solo sobre prd_nexo y lectura sobre lo que de verdad necesite.

Es la clase de cosa que no molesta hasta el día que una migración mal escrita toca una tabla que no era suya.

Cómo comprobar esto​

gcloud sql instances list --project produccion-ucic
gcloud sql databases list --instance mysql8 --project produccion-ucic