Auditando PostgreSQL

25 de octubre de 2023 por
Gustavo Orrillo
| Sin comentarios aún
 

Muchas veces nos piden que auditemos Odoo, y a veces PostgreSQL (para los que no lo saben, PostgreSQL es la poderosísima base de datos que "motoriza" Odoo). Si la industria para la que trabajamos es una industria regulada (por ejemplo financiera) es posible que por razones de regulación necesitemos auditar la base de datos.

Para auditar la base de datos PostgreSQL hay muchas soluciones. La primera y obvia es hacerlo mediante triggers en la base de datos, lo cual tiene algunos inconvenientes:

  • los triggers no capturan las lecturas, ni las sentencias de DDL
  • hay que implementar los triggers, y eso no es menor

Otra de la opciones es utilizar la extensión pgaudit (las extensiones son a PostgreSQL lo que los módulos son a Odoo, software de tercero que agrega funcionalidades al sistema) la cual puede auditar el comportamiento del sistema. pgaudit es muy popular y se encuentra bien documentado, por ende vamos a explicar como se instala en un server con Ubuntu y como se configura la misma. 

Instalación pgaudit en Ubuntu 20.04

Supongamos que estamos trabajando con un server Ubuntu 20.04 con un PostgreSQL versión 12. Lo primero que debemos hacer es chequear que el paquete postgresql-12-pgaudit se encuentra instalado (debe chequear que paquete de pgaudit se encuentra disponible para su base de datos).

sudo apt list --installed|grep pgaudit

Si no se encuentra instalado el paquete, debe proceder a instalarlo

sudo apt update
sudo apt install postgresql-12-pgaudit

Una vez instalado el paquete, se procede a configurar a PostgreSQL para que levante dicha extensión. Para eso se debe modificar el archivo de configuración de PostgreSQL el cual lo encontramos con el siguiente comando

find / -type f -name postgresql.conf

Y procedemos a editarlo. Vamos a necesitar modificar la opción shared_preload_libraries agregandole el valor pgaudit. Por ejemplo, si la base de datos no tiene ninguna extensión instalada dicha opción se verá de la siguiente manera:

shared_preload_libraries = 'pgaudit'

Acto seguido se debe reiniciar postgresql. Por ejemplo, se puede usar el siguiente comando (esto depende de cada instalación)

sudo systemctl restart postgresql.service

El siguiente paso es desde psql, crear la extensión en la base de datos que queremos auditar

psql -d <nombre de la base de datos>
create extension pgaudit;

Configuración de pgaudit

El paso siguiente a la instalación de pgaudit es configurarlo. Por ejemplo, si realizamos la siguiente consultal de SQL

select name,setting from pg_settings where name like '%pgaudit%'

Donde veremos una salida similar a lo que vemos a continuación:


Donde podemos ver los distintos valores que tienen las opciones de configuración de pgaudit. En este post nos vamos a concentrar en la opción pgaudit.log. Los distintos valores que puede tomar dicha opción los podemos encontrar en la documentación de pgaudit. En nuestro caso, nos interesa auditar los UPDATEs, INSERTs y DELETEs (se pueden auditar las lecturas, pero no es práctico).

Para configurar la opción pgaudit.log a write se debe ejecutar el siguiente comando

alter system set pgaudit.log to write;

Y luego reinicar PostgreSQL

sudo systemctl restart postgresl.service

Si chequeamos los valores de pgaudit en la configuración, notaremos el cambio


Quiza los cambios se persistan sin necesidad de reiniciar PostgreSQL... la verdad es que para mi siempre funcionaron reiniciando la base de datos. Ahora, volvamos a Odoo y ejecutemos algunas operaciones. Por ejemplo confirmar una orden de fabricación. Si lo hacemos podremos notar en el archivo de log de PostgreSQL entradas como la siguiente:


Donde podemos ver cada una de las operaciones que se realizaron en la base de datos. Como podrán ver, no es precisamente user-friendly (por mas que la salida del log lo hagamos a un archivo csv).

Conclusiones

pgAudit es una de la extensiones más poderosas y populares en el mundo de PostgreSQL y la más popular al momento de llevar una auditoría de la base de datos. Si necesitamos auditar PostgreSQL, es posiblemente la herramienta que tengamos que utiizar. 

Ahora si necesitamos auditar Odoo, quiza sea demasiada funcionalidad y no es precisamente amigable para el usuario final. Opino que cuando auditamos Odoo vamos a necesitar una herramienta que nos permita relacionar el objeto auditado (esto lo podemos capturar mediante triggers) junto con cuales valores cambiados (por ejemplo, el producto X cambio el precio de 10 a 20). Pero de ello vamos a hablar en otro post.

Gustavo Orrillo 25 de octubre de 2023
Compartir
Categorías
Archivar
Identificarse dejar un comentario