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.

Conserve las entradas de registro del controlador que requiera su aplicación en este odbcinst.iniarchivo. 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 seguimiento no está limitada al ámbito de su 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.

Utilice una compilación de unixODBC que incluya la corrección del búfer de seguimiento de diagnóstico del proveedor. 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 esta corrección, la aplicación puede abortarse en SQLGetDiagRec mientras el gestor formatea un error nativo para el seguimiento.

Seguimiento de un inicio de la aplicación

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 manejo de fail-fast, de modo que cualquier error en la creación de un directorio, el cambio de permisos o la copia de la configuración se detiene 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 mecanismo de protección cuenta los bytes y se detiene antes del inicio 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.

    Mantenga todas las entradas de registro del controlador que la aplicación necesite en el odbcinst.ini copiado. Si la aplicación utiliza un nombre de origen de datos del sistema (DSN), conserve 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. Configure TracePid=No incluso si la configuración copiada lo habilita, de modo que el seguimiento utilice el único archivo que se muestra 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. Configure ODBCINSTINI=odbcinst.ini para este proceso hijo, de modo que una sustitución heredada del nombre de archivo de registro no pase por alto 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 finalice la reproducción, salga de la aplicación para liberar los identificadores del entorno ODBC. Configure Trace=No o elimine los ajustes de seguimiento [ODBC] 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.

Oculta el contenido confidencial antes de compartir el seguimiento. 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.