¿Sugerencias para implementar tablas de auditoría en SQL Server?


Un método simple que he utilizado en el pasado es básicamente crear una segunda tabla cuya estructura refleja la que quiero auditar, y luego crear un activador de actualización/eliminación en la tabla principal. Antes de actualizar o eliminar un registro, el estado actual se guarda en la tabla de auditoría mediante el desencadenador.

Aunque son efectivos, los datos de la tabla de auditoría no son los más útiles o fáciles de reportar. Me pregunto si alguien tiene un mejor método para auditar los cambios de datos?

Allí no debería haber demasiadas actualizaciones de estos registros, pero es información altamente confidencial, por lo que es importante para el cliente que todos los cambios se auditen y se informen fácilmente.

Author: Mark Harrison, 2008-08-06

6 answers

¿Cuánta escritura vs. lectura de esta(s) tabla (s) esperas?

He utilizado una sola tabla de auditoría, con columnas para Table, Column, oldValue, newValue, User y ChangeDateTime, lo suficientemente genérica como para funcionar con cualquier otro cambio en la base de datos, y aunque se escribieron muchos datos en esa tabla, los informes sobre esos datos eran lo suficientemente escasos como para poder ejecutarse en períodos de bajo uso del día.

Añadido: Si la cantidad de datos vs. informes es una preocupación, la tabla de auditoría podría ser replicado en un servidor de base de datos de solo lectura, lo que le permite ejecutar informes siempre que sea necesario sin que el servidor maestro se quede atascado de hacer su trabajo.

 17
Author: Greg Hurlman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-06 19:35:51

Estamos utilizando el diseño de dos tablas para esto.

Una tabla contiene datos sobre la transacción (base de datos, nombre de la tabla, esquema, columna, aplicación que activó la transacción, nombre de host para el inicio de sesión que inició la transacción, fecha, número de filas afectadas y un par más).

La segunda tabla solo se usa para almacenar cambios de datos para que podamos deshacer los cambios si es necesario e informar sobre valores antiguos/nuevos.

Otra opción es usar una herramienta de terceros para esto, como ApexSQL Auditar o Cambiar la función de Captura de datos en SQL Server.

 6
Author: John Emeres,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-10 09:41:37

He encontrado estos dos enlaces útiles:

Utilizando CLR y tabla de auditoría única.
Crear un desencadenador de auditoría genérico con SQL 2005 CLR

Utilizando disparadores y tabla de auditoría separada para cada tabla auditada.
¿Cómo audito los cambios en los datos de SQL Server?

 2
Author: HadleyHope,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-27 12:44:00

¿Hay algún paquete de auditoría integrado? Oracle tiene un buen paquete, que incluso enviará los cambios de auditoría a un servidor separado fuera del acceso de cualquier tipo malo que está modificando el SQL.

Su ejemplo es impresionante... muestra cómo alertar a cualquier persona que modifique las tablas de auditoría.

 1
Author: Mark Harrison,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-06 18:49:23

OmniAudit podría ser una buena solución para usted necesita. Nunca lo he usado antes porque estoy bastante feliz escribiendo mis propias rutinas de auditoría, pero suena bien.

 1
Author: GateKiller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-06 19:56:14

Utilizo el enfoque descrito por Greg en su respuesta y relleno la tabla de auditoría con un procedimiento almacenado llamado desde los desencadenadores de la tabla.

 1
Author: Chris Miller,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:13:34