¿Cómo auditar la actividad de la base de datos sin problemas de rendimiento y escalabilidad?

StackOverflow https://stackoverflow.com/questions/67557

Pregunta

Necesito auditar toda la actividad de la base de datos, independientemente de si proviene de una aplicación o de alguien que emite algún SQL por otros medios.Por tanto, la auditoría debe realizarse a nivel de base de datos.La base de datos en cuestión es Oracle.Consideré hacerlo a través de activadores y también a través de algo llamado auditoría detallada que proporciona Oracle.En ambos casos, activamos la auditoría en tablas y columnas específicas.Sin embargo, descubrimos que el rendimiento realmente apesta cuando usamos cualquiera de estos métodos.

Dado que la auditoría es absolutamente imprescindible debido a las regulaciones vigentes en torno a la privacidad de los datos, me pregunto cuál es la mejor manera de hacerlo sin degradaciones significativas del rendimiento.Si alguien tiene experiencia específica de Oracle con esto, será útil, pero si no, también estarán bien las prácticas generales en torno a la auditoría de la actividad de la base de datos.

¿Fue útil?

Solución

No estoy seguro de si es un enfoque lo suficientemente maduro para un sistema de producción, pero tuve bastante éxito con el monitoreo de tráfico de bases de datos utilizando un tráfico de red.

Envíe los datos sin procesar entre la aplicación y la base de datos a otra máquina y decodifique y analice allí.

Utilicé PostgreSQL, y decodificar el tráfico y convertirlo en un flujo de operaciones de base de datos que se podían registrar era relativamente sencilla.Sin embargo, me imagino que funcionaría en cualquier base de datos donde se documente el formato de paquete.

El punto principal era que no suponía ninguna carga adicional para la base de datos.

Además, fue un monitoreo pasivo, registró toda la actividad, pero no pudo bloquear ninguna operación, por lo que podría no ser lo que está buscando.

Otros consejos

No es necesario "hacer el tuyo propio".Simplemente active la auditoría:

  1. Establezca el parámetro de la base de datos AUDIT_TRAIL = DB.
  2. Inicie la instancia.
  3. Inicie sesión con SQLPlus.
  4. Ingrese la declaración
    audit all;
    Esto activa la auditoría para muchas operaciones DDL críticas, pero DML y algunas otras declaraciones DDL aún no se auditan.
  5. Para habilitar la auditoría de estas otras actividades, pruebe declaraciones como estas:
    audit alter table; -- DDL audit
    audit select table, update table, insert table, delete table; -- DML audit

Nota:Toda la actividad "como sysdba" SIEMPRE se audita al O/S.En Windows, esto significa el registro de eventos de Windows.En UNIX, esto suele ser $ORACLE_HOME/rdbms/audit.

Revisar la Capítulo de auditoría de Oracle 10g R2 de la Referencia de base de datos SQL.

El seguimiento de auditoría de la base de datos se puede ver en la vista SYS.DBA_AUDIT_TRAIL.

Cabe señalar que la auditoría interna de Oracle será de alto rendimiento por definición.Está diseñado para ser exactamente eso, y es muy difícil imaginar algo que rivalice con él en rendimiento.Además, existe un alto grado de control "detallado" de la auditoría de Oracle.Puede obtenerlo tan preciso como desee.Finalmente, la tabla SYS.AUD$ junto con sus índices se puede mover a un espacio de tabla separado para evitar que se llene el espacio de tabla SISTEMA.

Saludos cordiales, opus

Si desea registrar copias de registros modificados en un sistema de destino, puede hacerlo con el software Golden Gate y no incurrir en mucho consumo de recursos del lado fuente.Además, no es necesario realizar ningún cambio en la base de datos de origen para implementar esta solución.

Golden Gate elimina los registros de rehacer de las transacciones que hacen referencia a una lista de tablas que le interesan.Estos cambios se escriben en un 'archivo de seguimiento' y se pueden aplicar a un esquema diferente en la misma base de datos, o enviarse a un sistema de destino y aplicarse allí (ideal para reducir la carga en su sistema de origen).

Una vez que obtenga el archivo de seguimiento en el sistema de destino, hay algunos ajustes de configuración; puede configurar una opción para realizar una auditoría y, si es necesario, puede invocar 2 funciones de Golden Gate para obtener información sobre la transacción:

1) Configure el parámetro de replicación INSERTALLRECORDS para insertar un nuevo registro en la tabla de destino para cada operación de cambio realizada en la tabla de origen.Tenga en cuenta que esto puede consumir mucho espacio, pero si necesita una auditoría exhaustiva, probablemente sea lo esperado.

2) Si aún no tiene CHANGED_BY_USERID y CHANGED_DATE adjuntos a sus registros, puede usar las funciones de Golden Gate en el lado de destino para obtener esta información para la transacción actual.Consulte las siguientes funciones en la Guía de referencia de GG:GGHeader ("UserID") GGheader ("TimeStamp")

Entonces, no, no es gratis (requiere licencia a través de Oracle) y requerirá algo de esfuerzo para ponerlo en marcha, pero probablemente mucho menos esfuerzo/costo que implementar y mantener una solución personalizada y usted tiene el beneficio adicional de enviar los datos. a un sistema remoto para que pueda garantizar un impacto mínimo en su base de datos de origen.

Si está utilizando Oracle, existe una función llamada CDC (cambio de datos de captura), que es una solución más eficiente en términos de rendimiento para requisitos de tipo auditoría.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top