Cómo rastrear y auditar cambios en una base de datos

Tu datos son importantes. De hecho, son cruciales para tu negocio. Entrar, almacenar y mantener datos válidos es el trabajo más importante de cualquier base de datos. Cuando eres el único usuario de la base de datos, puedes limitar los errores. Sin embargo, cuando varios usuarios están modificando datos, muchas cosas pueden salir mal. Es posible que quieras llevar un registro de cambios de entrada de datos. En otras palabras, es posible que quieras saber quién está cambiando los datos y cuándo. El seguimiento de cambios tiene dos beneficios:

  • Puedes determinar rápidamente qué operadores están cometiendo errores de forma consistente (o no están cometiendo errores).
  • Puedes deshacer rápidamente errores antes de que tus consultas e informes empiecen a generar datos erróneos.

¡La solución de este artículo no es una solución de auditoría real! Ese tipo de seguimiento exhaustivo requiere un gran esfuerzo de desarrollo. Encontrarás que esta solución es fácil de implementar y más que suficiente para la mayoría de las aplicaciones. Sin embargo, no evitará que usuarios inapropiados accedan a tu sistema; para eso necesitas seguridad. Además, un usuario sofisticado sabrá cómo abrir la tabla y eliminar registros que rastrean sus errores, aunque los valores faltantes de la clave principal deberían ser una señal de que faltan registros. La forma más fácil de evitar que los usuarios accedan a la tabla de auditoría es moverla a una base de datos segura y crear un enlace a ella.

Índice de Contenido
  1. Creando los componentes de auditoría
  2. Usando la tabla de auditoría

Creando los componentes de auditoría

No necesitas tablas individuales para cada formulario de entrada de datos o para cada tabla de datos. Una tabla almacena cada cambio en cualquier tabla. Consulta Tabla A para crear una tabla llamada Audit. Puedes modificar la tabla de ejemplo para adaptarla a tus necesidades. Es probable que no desees eliminar ninguno de los campos de la tabla de ejemplo, pero es posible que desees agregar algunos nuevos. Si lo haces, recuerda actualizar la instrucción SQL INSERT INTO en el subprocedimiento de auditoría que agregarás más adelante.

Tabla A: Esta tabla almacena los cambios de datos.

Campo

10 formas de monitorear las actividades de los empleados en la empresa

Tipo de datos

Explicación

IDRegistro

AutoNúmero

Clave primaria de la auditoría.

FechaEdición

Cómo usar el componente PrintDocument en aplicaciones VB.NET

Fecha/Hora

La fecha y hora en que se realiza el cambio.

Usuario

Texto

El usuario que realizó el cambio.

RegistroID

Microsoft planea adquirir una participación del 5% en Facebook por $500 millones

Texto

Valor que identifica de forma única el registro modificado.

TablaOrigen

Texto

Tabla o consulta.

CampoOrigen

Cómo filtrar correctamente el tráfico ICMP en Cisco IOS

Texto

El campo modificado.

ValorAnterior

Texto

El valor original antes del cambio.

ValorPosterior

La verdad detrás del inicio de Streem: el pasado oscuro que no te contaron

Texto

El nuevo valor después del cambio.

Cierra la tabla de auditoría y abre el Editor de Visual Basic (VBE). Inserta un módulo estándar y escribe la siguiente declaración Const y subprocedimiento de auditoría:

Const cDQ As String = ""
Sub SeguimientoDeAuditoría(frm As Form, idregistro As Control)
    'Realiza un seguimiento de cambios en los datos.
    'idregistro identifica el control correspondiente al campo clave primaria en frm, para identificar el registro.
    Dim ctl As Control
    Dim varAnterior As Variant
    Dim varPosterior As Variant
    Dim strNombreControl As String
    Dim strSQL As String
    On Error GoTo ManejadorError
    'Obtiene los valores modificados.
    For Each ctl In frm.Controls
        With ctl
            'Evita etiquetas y otros controles sin propiedad Valor.
            If .ControlType = acTextBox Then
                If .Value & <> .OldValue Then
                    varAnterior = .OldValue
                    varPosterior = .Value
                    strNombreControl = .Name
                    'Construye la instrucción INSERT INTO.
                    strSQL = "INSERT INTO " _
                      & "Auditoria (FechaEdicion, Usuario, RegistroID, TablaOrigen, " _
                      & " CampoOrigen, ValorAnterior, ValorPosterior) " _
                      & "VALUES (Now(), " _
                      & cDQ & Environ("username") & cDQ & ", " _
                      & cDQ & idregistro.Value & cDQ & ", " _
                      & cDQ & frm.RecordSource & cDQ & ", " _
                      & cDQ & .Name & cDQ & ", " _
                      & cDQ & varAnterior & cDQ & ", " _
                      & cDQ & varPosterior & cDQ & ")"
                    'Ve la instrucción evaluada en la ventana Inmediato.
                    Debug.Print strSQL
                    DoCmd.SetWarnings False
                    DoCmd.RunSQL strSQL
                    DoCmd.SetWarnings True
                End If
            End If
        End With
    Next ctl
    Set ctl = Nothing
    Exit Sub
    
ManejadorError:
    MsgBox Err.Description & vbNewLine _
      & Err.Number, vbOKOnly, "Error"
End Sub

Guarda el módulo como basSeguimientoAuditoria y cierra el VBE. Puedes llamar al subprocedimiento desde cualquier formulario de entrada de datos. Utilizamos el asistente AutoForm para crear un formulario de ejemplo basado en la tabla Shippers de Northwind (la base de datos de ejemplo que viene con Access). Puedes usar cualquier formulario vinculado, siempre y cuando permita ediciones. Para seguir nuestro ejemplo, abre el módulo del formulario Shippers en el VBE e introduce la siguiente instrucción para llamar al subprocedimiento de auditoría:

Private Sub Form_BeforeUpdate(Cancel As Integer)
    Call SeguimientoDeAuditoría(Me, IDRegistro)
End Sub

Ahora, aquí es donde tendrás que personalizar el procedimiento de ejemplo para que funcione con tus formularios. La llamada pasa dos variables de objeto a SeguimientoDeAuditoría(): el formulario como objeto Form y el control que contiene los datos que identifican de forma única el registro, como objeto Control. El identificador Me maneja el formulario. IDRegistro es la clave primaria de la tabla Shippers (y es un campo AutoNúmero). Utiliza una clave primaria natural de un solo campo o un campo AutoNúmero para este propósito.

Twitter se convierte en objetivo para el malware según usuarios australianos

Una vez que guardes tu formulario, estarás listo para comenzar a rastrear ediciones (SeguimientoDeAuditoría() no rastrea nuevos registros, solo cambios en datos existentes). Con el formulario de ejemplo en vista de formulario, cambia el último dígito en el número de teléfono de Speedy Express de 1 a 6, como se muestra en Figura A, y presiona [Tab]. En el siguiente registro, agrega la palabra Service al nombre del transportista, cambia el último dígito en el número de teléfono a 8 y presiona [Tab]. No puedes cambiar el valor de IDRegistro porque es un AutoNúmero. En un formulario de producción, los usuarios ni siquiera verían este valor.

Figura A

Cómo rastrear y auditar cambios en una base de datos - General | Imagen 1 Newsmatic
Cambia un valor existente en el formulario de ejemplo.

Presionar [Tab] te lleva al siguiente registro, lo que ejecuta el evento Before Update del formulario. Este procedimiento de evento pasa los dos objetos a SeguimientoDeAuditoría(): el formulario y los datos (como un objeto de control) que identifican de manera única el registro actual. La instrucción For...Each recorre la colección Controls del formulario. Cuando el control actual es un control de cuadro de texto, el procedimiento compara sus valores antiguos y nuevos. Si los valores son iguales, no hay cambios que rastrear y VBA pasa al siguiente control. Cuando los valores son diferentes, el procedimiento ejecuta una instrucción INSERT INTO que agrega un nuevo registro a la tabla de auditoría, rastreando ese cambio.

Tal como está, el procedimiento rastrea solo cambios en controladores de cuadro de texto y memo. Si necesitas rastrear cambios en otros tipos de controladores, cambia esa instrucción If por un Select Case en el formulario agregando todos los controladores necesarios:

No hay nada que hacer: la realidad de un impresora dañada por incendio
Select Case ctl.ControlType
    Case acTextBox, acCheckBox, acOptionGroup, ...

Probablemente te hayas dado cuenta de que el procedimiento pasa valores antiguos y nuevos como cadenas de texto, independientemente de su tipo de datos. Esa simplificación hace que este procedimiento sea más fácil de implementar. Después de todo, no necesitas mantener tipos de datos para fines de auditoría.

La instrucción Debug.Print te permite ver la instrucción INSERT INTO evaluada en la ventana Inmediato. Si tienes problemas, esta es una herramienta de depuración útil. Simplemente copia la instrucción evaluada desde la ventana Inmediato y ejecútala en la ventana SQL (Diseño de consulta). Access te dará pistas de error mucho mejores que VBA.

Nuestro procedimiento contiene un mínimo de manejo de errores. Querrás personalizar el procedimiento para adaptarlo a tus necesidades.

Usando la tabla de auditoría

La tabla realiza un seguimiento de cada cambio, creando una perspectiva histórica de lo que está sucediendo con los datos. Cada registro identifica al usuario que realizó el cambio, la fecha en que el usuario realizó el cambio y el cambio real, como se muestra en Figura B. La tabla probablemente aumentará rápidamente, por lo que los filtros o consultas probablemente sean la forma más eficiente de utilizar los registros de seguimiento. Por lo general, puedes limitar el resultado a un registro o usuario específico.

Figura B

Cómo imprimir varias diapositivas en una hoja de papel
Cómo rastrear y auditar cambios en una base de datos - General | Imagen 2 Newsmatic
La tabla realiza un seguimiento de los cambios en los datos.

Susan Sales Harkins es una consultora independiente y autora de varios artículos y libros sobre tecnologías de bases de datos. Su libro más reciente es Mastering Microsoft SQL Server 2005 Express, con Mike Gunderloy, publicado por Sybex. Otras colaboraciones con Gunderloy incluyen Automating Microsoft Access 2003 with VBA, Upgrader's Guide to Microsoft Office System 2003, ICDL Exam Cram 2 y Absolute Beginner's Guide to Microsoft Access 2003, todos publicados por Que. Actualmente, Susan es directora de publicaciones de Database Advisors en http://www.databaseadvisors.com. Puedes comunicarte con ella en [email protected].

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre General, allí encontraras muchos artículos similares a Cómo rastrear y auditar cambios en una base de datos , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.