Su pregunta se puede parafrasear como:
¿Cómo impide que alguien con acceso para cambiar los datos cambie los datos?
El primer paso es garantizar que solo las personas que se espera que tengan acceso tengan acceso. Se trata de buenas prácticas de administración de contraseñas y auditoría de cuentas (para aquellos que se espera que en algún momento tengan acceso), mientras que para evitar que las personas que nunca tienen la intención de tener acceso, parches regulares, inspecciones de código y pruebas de pluma.
Pero no puede evitar que su administrador de sistemas se vuelva loco (aparte de los buenos salarios y las condiciones de trabajo, etc.) y nunca puede probar que su sistema es completamente seguro. Pero todavía hay cosas que puede hacer para prevenir o contener dicha actividad.
La aplicación web clásica de 3 niveles tiene una cuenta de servicio en el nivel de aplicación que se conecta a la base de datos. He visto con frecuencia (y en el pasado, aplicaciones) en las que esta cuenta tiene acceso de lectura / escritura a todas las tablas que contienen los datos que se deben manipular. La restricción de las operaciones de lectura y escritura a registros específicos mediante el uso de procedimientos almacenados proporciona cierta mitigación.
Un enfoque complementario es hacer que la autenticación desde el nivel de la aplicación a la base de datos dependa de las credenciales proporcionadas por el usuario final en lugar de simplemente tratar la validación de las credenciales del usuario como una prueba de acceso. En su forma más simple, los usuarios finales se crearían como usuarios de la base de datos y la aplicación almacenaría sus credenciales cada vez que necesite conectarse. Sin embargo, este enfoque tiene problemas de escalabilidad, especialmente con Oracle, que tiene un proceso de autenticación bastante parejo que hace que la mayoría de las aplicaciones en Oracle reutilicen las conexiones persistentes. En ausencia de controles adicionales, también significa que las contraseñas del usuario final se almacenan en texto sin cifrar en lugar de solo la contraseña del servicio en texto sin cifrar (pero hay soluciones para esto).
La otra pieza importante del rompecabezas, después de haber hecho todo lo posible para evitar un incidente, es la detección: Captura de identificadores del cliente (dirección IP) cuando se modifican datos importantes: captura las consultas y el DML que se envía a esa base de datos y auditarla: desplegando datos de honeypot / canary