Seguimiento de acceso a datos en Linux y macOS

Descargar controlador ODBC

Este artículo te muestra cómo configurar el trazado del administrador de controladores de unixODBC en Linux y macOS. El trazado registra llamadas a la API ODBC que haces a través del Driver Manager. No rastrea los eventos internos del controlador ODBC de Microsoft. Para la diferencia entre registros diagnósticos y capas de trazado, véase diagnósticos ODBC.

La sección [ODBC] de odbcinst.ini controla el trazado para aplicaciones que utilizan la configuración del sistema unixODBC. Establezca Trace=Yes y especifique un camino absoluto para TraceFile:

[ODBC]
Trace=Yes
TracePid=No
TraceFile=/home/myappuser/odbc-trace.ABC123/odbc.log

La ruta es ilustrativa; utiliza la ruta absoluta privada generada en el siguiente procedimiento.

Guarda las entradas de registro de controladores que tu aplicación requiere en este archivo odbcinst.ini. La [ODBC] sección es global a la configuración. Añadir Trace=Yes a una sección específica de un controlador no limita el rastreo del administrador de controladores unixODBC a ese controlador.

La ruta predeterminada del archivo de trazado no se limita a tu aplicación. Utiliza un directorio privado y una ruta explícita de archivo de trazado en su lugar. El trazado puede afectar al rendimiento, y la salida puede contener datos de la aplicación. Restringe el acceso al archivo y captura solo las llamadas que necesites.

Usa una compilación de unixODBC que incluya la corrección del búfer de rastreo de diagnóstico de la fuente original. Los paquetes de los proveedores pueden incluir un backport; comprueba los parches del paquete en lugar de basarse únicamente en el número de versión. Sin la solución, la aplicación puede abortar en SQLGetDiagRec mientras el gestor formatea un error nativo para el trazado.

Inicie la aplicación Trace One

Abre un shell dedicado de Bash y luego ejecuta los comandos del shell de este procedimiento en esa misma sesión de terminal. El primer comando habilita el modo de error inmediato, por lo que una creación fallida de directorios, un cambio de permisos o una copia de configuración fallida detienen el proceso antes del inicio de la aplicación. Mantén la shell abierta para los pasos posteriores y escribe exit después de la limpieza.

  1. Ejecuta odbcinst -j y apunta las rutas para los archivos del controlador del sistema y fuente de datos del sistema. Crea directorios privados de configuración y traza, luego copia los archivos de configuración del sistema. Sustituye las rutas de archivo de ejemplo por las que se informan en tu sistema:

    set -eu
    config_dir=$(mktemp -d "$HOME/odbc-trace-config.XXXXXX")
    trace_dir=$(mktemp -d "$HOME/odbc-trace.XXXXXX")
    if [ "$(printf '%s' "$trace_dir/odbc.log" | wc -c)" -gt 62 ]; then
        printf 'Use a shorter parent path for the trace directory (log path exceeds 62 bytes).\n' >&2
        rmdir "$trace_dir" "$config_dir"
        exit 1
    fi
    driver_file=/etc/odbcinst.ini
    data_sources_file=/etc/odbc.ini
    chmod 700 "$config_dir" "$trace_dir"
    cp "$driver_file" "$config_dir/odbcinst.ini"
    if [ -f "$data_sources_file" ]; then
        cp "$data_sources_file" "$config_dir/odbc.ini"
    else
        printf '[ODBC Data Sources]\n' > "$config_dir/odbc.ini"
    fi
    chmod 600 "$config_dir/odbcinst.ini" "$config_dir/odbc.ini"
    printf '%s\n' "$trace_dir/odbc.log"
    

    La implementación de configuración de traza unixODBC anclada suministra un búfer de 64 bytes al lector de perfil de registro. Ese lector copia de forma segura una ruta de hasta 62 bytes y su terminador nulo. Para caminos más largos, su rama de truncamiento no añade un terminador nulo. Las comprobaciones con unixODBC 2.3.14 en Linux y macOS confirmaron la creación correcta de la traza a 62 bytes. El guard cuenta bytes y se detiene antes del lanzamiento si la ruta generada es demasiado larga. Si se detiene, usa una ruta padre más corta y escribible en el comando trace_dir, mantén mktemp -d y reinicia el procedimiento.

    Guarda todas las entradas de registro de controladores que la aplicación necesite en el elemento copiado odbcinst.ini. Si la aplicación utiliza un nombre de fuente de datos del sistema (DSN), mantenga su definición en el odbc.ini copiado. Si su Driver valor es un nombre de registro, mantén esa definición coincidente en la copia odbcinst.ini. Si el valor es una ruta absoluta de la biblioteca, confirma que la biblioteca existe y es accesible en esa ruta. En la revisión unixODBC fijada, se utiliza un valor que comienza con / como ruta de biblioteca; otros valores se resuelven mediante un registro de controladores. Para más información, consulta el manual odbc.ini de unixODBC y la implementación fijada de búsqueda de controladores. Los comandos dejan la configuración DSN del usuario en su lugar.

  2. En la sección privada odbcinst.ini, añade o actualiza la sección global [ODBC] . Usa la ruta absoluta impresa por el comando anterior para TraceFile; no crees una segunda sección [ODBC]:

    [ODBC]
    Trace=Yes
    TracePid=No
    TraceFile=/home/myappuser/odbc-trace.ABC123/odbc.log
    

    Sustituye la ruta de ejemplo por la ruta exacta que se imprimió en el paso anterior. Configura TracePid=No incluso si la configuración copiada lo habilita, de modo que la traza use el único archivo mostrado aquí.

  3. Inicia la aplicación con el directorio privado de configuración del sistema:

    if (umask 077; ODBCSYSINI="$config_dir" ODBCINSTINI=odbcinst.ini \
        ODBCSEARCH=ODBC_BOTH_DSN ./your-app); then
        :
    else
        app_status=$?
        printf 'Application exited with status %s\n' "$app_status" >&2
    fi
    

    El archivo trace debe contener llamadas a la API ODBC y sus códigos de retorno. El condicional mantiene el shell abierto para la limpieza incluso si la aplicación sale con un error. El administrador de controladores unixODBC lee su directorio de configuración del sistema desde ODBCSYSINI. Establezca ODBCINSTINI=odbcinst.ini para este proceso hijo para que una anulación heredada del nombre de archivo de registro no eluda el archivo copiado. Para la búsqueda del nombre de archivo, consulta la implementación de configuración fijada de unixODBC.

    ODBCSEARCH=ODBC_BOTH_DSN anula un modo de búsqueda de DSN heredado solo para el usuario o solo para el sistema para este inicio. Estas configuraciones dejan el archivo DSN del usuario existente en su lugar. unixODBC busca tanto en archivos DSN del sistema como de usuario, y el DSN de usuario tiene prioridad cuando el mismo nombre existe en ambos. Comprueba si hay un DSN duplicado de usuario si la aplicación parece usar configuraciones diferentes a las del DSN del sistema copiado. Si la aplicación requiere intencionadamente un modo de búsqueda restringido, conserva ese modo en su lugar y comprueba que el archivo DSN seleccionado contiene la definición requerida. Para más información, consulta la implementación fijada de search-mode en unixODBC, el manual de isql y el manual de odbc.ini.

Cuando la ejecución termina, sal de la aplicación para liberar sus manejadores de entorno ODBC. Configura Trace=No o elimina la [ODBC] configuración de trazado antes de volver a iniciar la aplicación. Restringe el acceso al registro antes de inspeccionarlo o compartirlo:

if [ -f "$trace_dir/odbc.log" ]; then
    chmod 600 "$trace_dir/odbc.log"
else
    printf 'No trace file was created. Check that the application started and allocated an ODBC environment.\n' >&2
fi

Una aplicación que no se inicia o se cierra antes de asignar un entorno ODBC podría no crear un archivo trace. La verificación reporta el archivo que falta y mantiene la limpieza accesible en la shell dedicada.

Redacta el contenido sensible antes de compartir la traza. Borra el registro cuando ya no lo necesites. Elimina los archivos de configuración privados y directorios solo si los creaste para esta traza y ya no necesitas su contenido.

Los siguientes comandos eliminan solo los archivos y directorios creados en este procedimiento:

rm -f "$trace_dir/odbc.log" "$config_dir/odbcinst.ini" "$config_dir/odbc.ini"
rmdir "$trace_dir" "$config_dir"

Encuentra los archivos de configuración utilizados por el Driver Manager

Ejecuta odbcinst -j para mostrar las rutas de configuración del sistema y del usuario. Los caminos pueden variar según la plataforma y la construcción de unixODBC. Los DSN de usuario están disponibles para un usuario específico. Las DSN del sistema están disponibles para los usuarios en el sistema, y su gestión puede requerir permisos de administrador. Cuando el mismo nombre DSN existe en ambos archivos, el DSN de usuario tiene prioridad. Para más información, consulte la documentación de unixODBC.