¿Qué es la auditoría?
Cada operación significativa que ocurre en el sistema — inicio de sesión, creación de bienes, modificaciones, eliminaciones — genera automáticamente un registro en la tablaauditoria. Esto permite a los administradores responder con precisión a preguntas como:
- ¿Quién incorporó o desincorporó un bien?
- ¿Desde qué IP se realizó una modificación?
- ¿Qué datos tenía un registro antes de ser editado?
Cómo acceder
Navega a Configuración en el menú lateral y haz clic en el botón Ver Registro de la sección Auditoría del Sistema. El sistema carga directamenteauditoria_sistema.php.
Estructura de la tabla auditoria
Descripción de cada columna
| Columna | Tipo | Descripción |
|---|---|---|
id | int AUTO_INCREMENT | Identificador único del evento |
tabla_afectada | varchar(50) | Nombre de la tabla sobre la que se actuó (p. ej. bienes, movimientos, usuarios) |
accion | enum | Tipo de operación: INSERT, UPDATE o DELETE |
usuario_cedula | varchar(20) | Cédula del usuario que realizó la acción. NULL si el usuario fue eliminado (FK con ON DELETE SET NULL) |
datos_anteriores | varchar(2000) | Estado del registro antes de la modificación, en formato JSON. Solo aplica para UPDATE y DELETE |
datos_nuevos | varchar(2000) | Estado del registro después de la operación, en formato JSON. Solo aplica para INSERT y UPDATE |
ip_address | varchar(45) | Dirección IP del cliente al momento del evento ($_SERVER['REMOTE_ADDR']). Soporta IPv6 |
fecha_accion | timestamp | Fecha y hora exacta del evento, con zona horaria +00:00 |
Tipos de evento registrados
INSERT
Nuevo registro creado en cualquier tabla del sistema. Se guarda el estado inicial en
datos_nuevos.UPDATE
Modificación de un registro existente. Se guardan tanto
datos_anteriores como datos_nuevos para comparar el cambio.DELETE
Eliminación de un registro. Se guarda el estado final en
datos_anteriores antes de borrarlo.Eventos de sesión
Los inicios de sesión exitosos (
login_exitoso) y fallidos (login_fallido) también quedan registrados junto con la IP de origen. El campo accion puede contener estos valores literales adicionales a los del enum estándar.Colores de badge por tipo de acción
La funciónobtenerColorAccion() asigna un color visual a cada tipo de evento en la tabla de resultados:
Filtrar registros
La página carga con un rango predeterminado de los últimos 7 días. Puedes ajustar los filtros y hacer clic en Buscar.Rango de fechas
Fecha Desde (
fecha_desde) y Fecha Hasta (fecha_hasta). Ambos son requeridos. El valor por defecto es:Filtro por usuario
Selector
cedula_usuario. Muestra todos los usuarios registrados. Selecciona Todos los Usuarios para ver actividad sin restricción de autor.WHERE sobre la consulta base:
Paginación
Los resultados se muestran de 15 registros por página ($registros_por_pagina = 15), ordenados por fecha_accion DESC (más recientes primero).
$query_string.
Cómo interpretar un registro de auditoría
Cada fila de la tabla muestra:| Columna en pantalla | Origen |
|---|---|
| ID | auditoria.id |
| Usuario | nombres + apellidos de la tabla usuarios (JOIN por cedula). Muestra “Sistema” si el usuario fue eliminado |
| Acción | Badge coloreado con el valor de auditoria.accion |
| Tabla | auditoria.tabla_afectada |
| Registro | Contenido abreviado de datos_nuevos o datos_anteriores (con tooltip del valor completo) |
| Detalle | Valor completo de datos_nuevos |
| Fecha/Hora | fecha_accion formateada como d/m/Y H:i con date() |
Ejemplo de registro de cambio de contraseña
Cuando un usuario cambia su contraseña desdeperfil.php, se inserta el siguiente registro:
datos_nuevos es {"password":"cambiado"} — el hash nuevo nunca se almacena en la auditoría.
Ejemplo de registro de cambio de correo
Preguntas frecuentes
¿Se pueden borrar registros de auditoría?
¿Se pueden borrar registros de auditoría?
No existe ningún formulario en la interfaz actual para eliminar registros de la tabla
auditoria. Los datos son inmutables desde la aplicación web, lo que preserva la integridad del historial.¿Qué ocurre si se elimina un usuario?
¿Qué ocurre si se elimina un usuario?
La restricción
ON DELETE SET NULL en la clave foránea auditoria_ibfk_1 deja el campo usuario_cedula en NULL cuando el usuario es borrado de la tabla usuarios. La columna Usuario en pantalla mostrará ‘Sistema’ para esos registros.¿El campo ip_address registra IPv6?
¿El campo ip_address registra IPv6?
Sí. El tipo
varchar(45) es suficiente para almacenar la representación textual más larga de una dirección IPv6. El valor se obtiene de $_SERVER['REMOTE_ADDR'].¿Por qué algunos registros muestran 'Sistema' en la columna Usuario?
¿Por qué algunos registros muestran 'Sistema' en la columna Usuario?
Cuando la acción fue registrada por un proceso automatizado, o cuando el usuario asociado ya no existe en la tabla
usuarios (FK con ON DELETE SET NULL), el JOIN no encuentra un nombre y se muestra el literal ‘Sistema’ como valor por defecto.