2008-09-15 12 views
5

Tengo la necesidad de auditar toda la actividad de la base de datos, independientemente de si proviene de la aplicación o de alguien que emite algunos sql por otros medios. Entonces la auditoría debe hacerse en el nivel de la base de datos. La base de datos en cuestión es Oracle. Miré hacerlo a través de Triggers y también a través de algo llamado Auditoría de Granular Fino que proporciona Oracle. En ambos casos, activamos la auditoría en tablas específicas y columnas específicas. Sin embargo, descubrimos que Performance realmente apesta cuando usamos cualquiera de estos métodos.Cómo auditar la actividad de la base de datos sin problemas de rendimiento y escalabilidad?

Dado que la auditoría es una necesidad absoluta debido a las regulaciones sobre privacidad de 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 solo las prácticas generales sobre la auditoría de la actividad de la base de datos también estarán bien.

Respuesta

1

No estoy seguro si es un enfoque lo suficientemente maduro para un sistema de producción , pero tuve bastante éxito con la supervisión del tráfico de la base de datos usando un rastreador de tráfico de red.

Envíe los datos brutos entre la aplicación y la base de datos a otra máquina y descodifíquelos y analícelos allí.

Utilicé PostgreSQL y decodificando el tráfico y convirtiéndolo en una secuencia de operaciones de base de datos que se podían registrar era relativamente directa. Me imagino que funcionaría en cualquier base de datos donde esté documentado el formato del paquete .

El punto principal es que no pone carga adicional en la base de datos.

Además, era una supervisión pasiva, registraba toda la actividad, pero no podía bloquear ninguna operación, por lo que podría no ser exactamente lo que está buscando.

1

No hay necesidad de "hacer las suyas". Solo active la auditoría:

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

Nota: Toda la actividad "como sysdba" es auditado SIEMPRE a la O/S. En Windows, esto significa el registro de eventos de Windows. En UNIX, generalmente es $ ORACLE_HOME/rdbms/audit.

Consulte la Oracle 10g R2 Audit Chapter de la Referencia SQL de la base de datos.

La pista de auditoría de la base de datos se puede ver en la vista SYS.DBA_AUDIT_TRAIL.

Debe señalarse 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 cualquier otra cosa que compita con el rendimiento. Además, existe un alto grado de control "detallado" de la auditoría de Oracle. Puede obtenerlo tan preciso como lo desee. Finalmente, el SYS.La tabla AUD $ junto con sus índices se pueden mover a un espacio de tabla separado para evitar llenar el espacio de tabla SYSTEM.

Saludos cordiales, Opus

1

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

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

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

1) Establezca el parámetro 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. Ten en cuenta que esto puede consumir mucho espacio, pero si necesitas una auditoría exhaustiva, probablemente esto se espere.

2) Si aún no tiene un 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. Echa un vistazo a las siguientes funciones en la Guía de referencia GG: GGHEADER ("IDUSUARIO") GGHEADER ("TIMESTAMP")

Así que no, no es gratis (requiere licencias a través de Oracle), y requerirá un poco de esfuerzo para volver a acelerarse, pero probablemente sea mucho menos costoso que implementar y mantener una solución personalizada, y 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.

0

si está utilizando oracle entonces hay una función llamada CDC (Capture data change) que es una solución más eficiente en cuanto a rendimiento para auditar el tipo de requisitos.

Cuestiones relacionadas