En este artículo ponemos sobre la mesa, las opciones disponibles actualmente en PostgreSQL, para el registro de cambios en nuestra base de datos que sea de interés conocer por motivos de auditoría.
Los sistemas existentes en la actualidad están basados en log o basados en disparadores. Y para ambos tipos de sistemas podremos recurrir a las funcionalidades nativas de PostgreSQL o a extensiones y contribuciones de terceros bajo licencia PostgreSQL.
Utilizar el log de PostgreSQL para registrar información de auditoría puede ser una idea tentadora pues sería muy sencillo de implementar. Bastaría con definir, en el parámetro log_statement, el tipo de sentencias que queremos que se registren (DML, DDL o todas) y habilitar el registro de otros eventos como las conexiones y desconexiones a las bases de datos del clúster (log_connections y log_disconnections).
Huye del log si el objetivo es la auditoría, por muchas razones, entre ellas:
- El log actúa sobre todo el servidor, no sólo sobre la base de datos que queramos auditar, y tampoco filtra por objetos por lo que los ficheros de log se volverían inmensos.
- El log es volátil por lo que tendrás que implementar un proceso que extraiga las pistas de auditoría del log para conservarlas en ficheros permanentes y además eliminar de esos ficheros el «ruido».
- Las sentencias que se hayan ejecutado y fallen no tendrán un efecto en la base de datos sin embargo podría ser considerada por error una pista de auditoría válida.
El log de PostgreSQL a lo suyo, que tiene muchas y muy valiosas funciones. Si quieres conocerlas todas échale un vistazo a nuestro curso Administración PostgreSQL: El log del servidor.
También de forma nativa en PostgreSQL podríamos utilizar disparadores para grabar en tablas, los eventos que ocurran y que sean de interés para la auditoría, sobre los objetos concretos que se precisan auditar. Incluso de campos concretos de unas determinadas tablas. Con este sistema también podemos formar la pista de auditoría exacta, con la información tan detallada como sea preciso.
Buena opción esta, sobre todo por la capacidad de adaptación a las necesidades particulares de auditoría para cada base de datos. Por la posibilidad de evitar la ejecución del disparador, a través de la cláusula WHEN del comando CREATE TRIGGER, cuando se actualizan campos que cambian mucho y no nos interesan. Y por la posibilidad de conservar la información de auditoría en una base de datos remota si hacemos uso, por ejemplo, de plproxy.
2ndQuadrant ha implementado un sistema de auditoría basado en triggers, listo para instalar y utilizar, llamado audit-trigger 91 plus, que podrías considerar si buscas una herramienta libre y evitarte el trabajo de tener que desarrollarla.
En cuanto a sistemas basados en el log, existe una extensión para PostgreSQL llamada pgAudit que mejora, en mucho, el registro estándar de sentencias en el log.
pgAudit tiene dos modos de funcionamiento: registro de auditoría a nivel de sesión y registro de auditoría a nivel de objetos, por si estamos interesados en una amplía colección de eventos de la sesión, independientemente de los objetos de los que se trate, o si estamos interesados únicamente en registrar las acciones sobre algunas relaciones o sobre determinados campos de dichas relaciones.
En ambos casos, la pista de auditoría se graba en el log con la etiqueta AUDIT y en formato CSV, lo cual facilita la tarea de reconocer las pistas de auditoría del resto de eventos del sistema y permite su exportación sencilla a un ficheros Excel o a una tabla de base de datos.
Una contribución interesante de David Steele para pgAudit es pgAudit Analyze. La instalación de pgAudit Analyze crea un conjunto de tablas agrupadas en un esquema y un proceso ejecutado como demonio en el sistema operativo se encargará de detectar las pistas de auditoría en el log y cargar la información en dichas tablas.
Hemos desarrollado un curso de formación online dónde podrás profundizar en todos estos temas. 20 vídeos y otros recursos que te ayudarán a conocer las distintas opciones de auditoría disponibles hoy día para PostgreSQL, desde el punto de vista práctico en los que realizamos las instalaciones y configuraciones necesarias, hacemos muchos ejemplos, analizamos la viabilidad de cada una de las soluciones y desarrollamos mejoras para conseguir el objetivo: auditar bases de datos PostgreSQL de forma efectiva y eficiente. Infórmate aquí.