Como se ha aludido anteriormente, la seguridad de las bases de datos es complicada. La propia base de datos tiene mecanismos de seguridad inherentes limitados (básicamente, autenticación y roles/autorización). Las bases de datos necesitan ser protegidas, generalmente a nivel de red y de autenticación – y, aún así, es un nivel de protección tenue.
La necesidad de que las bases de datos sean capaces de repartir datos bajo demanda, de almacenar todos esos datos, y de compartimentar y clasificar esos datos es un reto enorme (aunque sea teóricamente sencillo). Bloquear los datos de los componentes es un gran desafío.
Las variantes de SQL son estándar, y pueden ser bloqueadas dentro de lo razonable, pero son notorias por los vectores de ataque vulnerables (en gran parte porque presentan una enorme superficie de ataque – el perro más grande en el juego es siempre el objetivo más grande). Las soluciones basadas en la nube añaden otra capa de complejidad (y de mitigación de riesgos de seguridad, al menos en el lado legal del juego).
La seguridad adecuada de una base de datos requiere un cortafuegos inteligente (en serio, proteja sus puertos – use IDS/IPS si es práctico), validación de entradas (no permita consultas que usen una sintaxis extraña) y, por el amor de todo lo sagrado, sólo permita la entrada desde fuentes de confianza (un proxy/proxy inverso es una buena idea).