Cómo crear la Auditoría en PostgreSQL

Hola a todos, hoy os mostraremos cómo crear la auditoria en Postgres.

La auditoría de base de datos es el proceso de monitorear y registrar de forma persistente las acciones realizadas por los usuarios dentro de un motor de base de datos. No se trata solo de registrar errores, sino de crear una «caja negra» o historial forense que permita responder a cuatro preguntas críticas ante cualquier incidente:

  • ¿Quién? La identidad del usuario o aplicación.
  • ¿Qué? La sentencia exacta: un SELECT, un DELETE o un DROP.
  • ¿Cuándo? El timestamp preciso con milisegundos.
  • ¿Desde dónde? La IP o proceso que originó la conexión.

Entonces hoy mostraremos como crear la auditoria desde el principio y de forma muy fácil para que los puedan aplicar en sus servidores de PostgreSQL.

Instalación del Paquete (S.O.)

El primer paso es instalar el binario compatible con nuestra versión de base de datos. En este caso, utilizamos el repositorio oficial de PostgreSQL para obtener la versión 1.4 de la extensión.

Ejecutar como root:

Configuración en el Motor de Base de Datos

Para que PostgreSQL cargue la librería de auditoría, debemos modificar los parámetros de arranque. Esto lo haremos modificando el fichero postgresql.conf. Debes añadir pgaudit a las librerías precargadas:

Nota: si tiene otras extensiones no las borres solo agrega la nueva extensión de último.

Reiniciar el servicio. Para que los cambios en las librerías tengan efecto, es necesario un reinicio del servicio:

Activación de la Extensión y Parámetros

Una vez reiniciado el motor, entramos en la base de datos específica (en este ejemplo terra_pre) y activamos la funcionalidad que nos permitirá usar la auditoria en la base de datos postgres.

como crear la auditoría en PotsgreSQL

Optimización de los Logs (Legibilidad)

Para que el log de auditoría sea útil, necesitamos que incluya el nombre del usuario y la base de datos en cada línea. Ajustamos el prefijo del log:

Prueba de Concepto y Validación

Para verificar que todo quede correctamente y que la configuración de los parámetros aplicados anteriormente funcione:

  1. Ingresaremos a la base de datos con un usuario que nos va a permitir hacer Lectura/Escritura.
  2. Aplicaremos un DROP a la tabla que crearemos de forma que podamos verlo en el log de auditoría.  
como crear la auditoría en PotsgreSQL

Busca la evidencia en el Log:

Ahora vamos a filtrar el log buscando específicamente a ese usuario. Fíjate cómo ahora aparece el nombre entre corchetes:

como crear la auditoría en PotsgreSQL

Conclusiones y Recomendaciones

Antes de comenzar con la auditoría, debemos tener en cuenta lo siguiente:

  • Espacio en Disco: Auditar la clase READ (SELECTs) genera un volumen de logs masivo, especialmente si hay herramientas como repmgr monitoreando. Se recomienda usar solo WRITE, DDL en producción si el espacio es limitado.
  • Rotación: Asegúrate de tener configurado log_rotation_size y log_truncate_on_rotation para evitar que el disco se llene.
  • Rollback: de la Auditoría (Quitarla por completo). Si lo que deseas es dar marcha atrás a toda la configuración de pgaudit que realizamos, los pasos son los siguientes:
    • Paso A: Desactivar el registro (Sin reiniciar). Si solo quieres que deje de escribir en el log pero mantener la extensión instalada:
    • Paso B: Eliminar la extensión de la base de datos. Si quieres quitar la funcionalidad de la base de datos terra_pre:
    • Paso C: Quitar la librería del motor (Requiere Reinicio)
      • Para un «Rollback» total donde el motor ya no cargue pgaudit al arrancar:
      • Edita el archivo postgresql.conf.
      • Busca shared_preload_libraries y elimina pgaudit de la lista.
      • Reinicia el servicio:

Esperamos que después de estos pasos sepas cómo crear la auditoria. En caso contrario, puedes contactarnos sin compromiso.

¿Aún no conoces Query Performance? Descubre cómo puede ayudarte en tu entorno Oracle. Más información en su página de LinkedIn.

Sígue a GPS en LinkedIn

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *