Ir al contenido
angel.library

Observabilidad y seguridad de bases de datos

Operar una base significa saber si responde correctamente, si se acerca a un límite y si alguien accede más de lo necesario. La observabilidad explica el estado; la seguridad reduce probabilidad e impacto; los runbooks convierten señales en acciones controladas.

Un threat model o modelo de amenazas enumera activos, actores, vías de acceso y controles. Para una base de datos, pregunta:

  • ¿qué datos causarían mayor daño si se filtran, alteran o eliminan?
  • ¿qué servicios, personas y proveedores pueden conectarse?
  • ¿desde qué redes y con qué identidad?
  • ¿cómo puede una entrada externa convertirse en consulta?
  • ¿qué sucede si se roba una credencial de aplicación?
  • ¿cómo se detecta y recupera una modificación no autorizada?
RiesgoCómo ocurreDefensa principal
inyección SQL/NoSQLentrada se mezcla con sintaxisparámetros, allowlists y permisos mínimos
credencial filtradasecreto en Git, log o clientesecret manager, rotación, red privada
cuenta excesivaaplicación usa rol administradorseparar roles y privilegios mínimos
exfiltraciónendpoint devuelve datos sin autorización o límiteautorización por objeto, paginación, auditoría
borrado/ransomwareidentidad comprometida modifica primario y réplicasbackups aislados, retención y restauración probada
DoS de consultasfiltros costosos o concurrencia sin límitetimeouts, límites, rate limiting, índices y backpressure
copia inseguraproducción se descarga a desarrolloanonimización y entornos con acceso controlado

Los parámetros protegen valores, no nombres de tabla, columnas u operadores dinámicos. Esos fragmentos se eligen desde una lista permitida. En MongoDB, tampoco aceptes directamente un objeto de filtro del cliente.

Internet
→ autenticación y rate limit
→ API con autorización y validación
→ red privada / firewall
→ rol de base con mínimo privilegio
→ constraints y políticas por fila
→ cifrado, auditoría y backups aislados

Cada capa asume que otra puede fallar. La aplicación valida intención; la base protege integridad; la red reduce exposición; el backup permite recuperarse.

  • nunca envíes la URL de base al frontend;
  • no guardes .env real en el repositorio;
  • usa TLS y verificación adecuada al proveedor;
  • limita orígenes de red y evita puertos públicos cuando sea posible;
  • asigna identidad por servicio y entorno;
  • rota credenciales con un periodo de convivencia;
  • evita incluir contraseñas o parámetros en errores, traces y métricas.

Una conexión desde una función serverless sigue siendo acceso de servidor. El navegador llama a una API; la API autoriza y consulta con credenciales privadas.

Saber quién es el usuario no demuestra que pueda leer una fila. Verifica organización, propiedad y acción en cada operación.

SELECT id, title
FROM projects
WHERE id = $1
AND tenant_id = $2;

El tenant_id proviene de una sesión validada, no de confiar en un campo enviado por el cliente. RLS puede reforzar este control, pero necesita contexto seguro, pruebas y un rol que no la eluda.

  • latencia por operación y percentiles p50, p95, p99;
  • errores por código o clase, no solo total;
  • tiempo de adquisición del pool y consultas por solicitud;
  • filas retornadas y payload;
  • reintentos, timeouts y cancelaciones.
  • conexiones activas, esperando e inactivas en transacción;
  • CPU, memoria, almacenamiento e IOPS;
  • locks, deadlocks y consultas largas;
  • lecturas de caché/disco y crecimiento de tablas/índices;
  • WAL, lag de réplica y estado de backups;
  • evictions y hit rate si el motor es de caché.

Una métrica sin objetivo ni acción produce ruido. Define un umbral sostenido, severidad, propietario y enlace al runbook.

  • un log narra un evento concreto;
  • una métrica resume valores a lo largo del tiempo;
  • una traza conecta el recorrido de una solicitud entre servicios.

Añade un identificador de solicitud o traza para relacionar endpoint y consulta, pero no registres SQL con datos personales completos. Normaliza consultas y separa valores. Controla acceso y retención de la telemetría: también contiene información sensible.

AlertaCondición orientativaAcción inicial
pool saturadoespera alta durante varios minutosrevisar consultas, carga e instancias
almacenamientotendencia agotará capacidad antes del margenidentificar crecimiento y ampliar con plan
réplica atrasadasupera tolerancia de lectura/failoverrevisar red, carga y WAL
backup fallidono existe copia dentro del RPOcorregir y ejecutar/verificar copia
locks prolongadosbloquean una ruta críticaidentificar bloqueador y migración/query
error rateaumenta sobre línea basesegmentar por operación y código

Evita alertar por un pico de segundos que se resuelve solo. Tampoco esperes al 100 % de disco: la tendencia y el tiempo hasta el límite son más accionables.

  1. Confirma impacto: endpoints, regiones, tenants y periodo.
  2. Separa espera de pool, red y ejecución SQL.
  3. Revisa cambios recientes, migraciones y jobs.
  4. Identifica consultas por costo total y frecuencia.
  5. Examina locks, CPU, I/O, conexiones y almacenamiento.
  6. Obtén un plan con parámetros representativos en un entorno seguro.
  7. Mitiga con el cambio reversible más pequeño.
  8. Verifica recuperación y documenta causa raíz.

Reiniciar puede borrar evidencia y ofrecer alivio temporal sin corregir el origen. Captura estado antes cuando el incidente lo permita.

  • revoca o rota la credencial comprometida;
  • aísla la vía de acceso sin destruir evidencia;
  • preserva logs y línea temporal;
  • determina datos leídos, modificados o eliminados;
  • restaura en un entorno separado y valida;
  • comunica según el plan de incidentes y obligaciones aplicables;
  • corrige el control y prueba que el ataque ya no funciona.

No inventes una restauración durante el incidente. Practica con anticipación y registra tiempos reales.

Una copia de producción en una laptop o preview amplía la superficie de ataque. Prefiere datos sintéticos. Si necesitas realismo, anonimiza de forma irreversible, conserva relaciones necesarias y elimina secretos, tokens, contenido personal y archivos asociados.

Prueba el anonimizador: reemplazar nombres pero dejar correos, texto libre o URLs firmadas no es suficiente.

  • base no expuesta innecesariamente a Internet;
  • identidades separadas y permisos mínimos;
  • autorización por recurso y tenant;
  • parámetros/allowlists para consultas dinámicas;
  • secretos rotables fuera de Git y logs;
  • métricas de aplicación, pool y gestor correlacionadas;
  • alertas con propietario y runbook;
  • backups aislados y restauración ensayada;
  • datos no productivos sintéticos o anonimizados;
  • plan de respuesta con evidencia y comunicación.