“Registros de Snowflake” significa una de dos cosas, y la exportación funciona igual para ambas. Puede ser datos de seguridad que tu equipo guarda en tablas de Snowflake. O puede ser el propio rastro de auditoría de Snowflake, las vistas SNOWFLAKE.ACCOUNT_USAGE como LOGIN_HISTORY y QUERY_HISTORY. Para extracciones pequeñas, ejecuta la consulta en SnowSQL con salida JSON. Para algo más grande, descarga usando COPY INTO una etapa usando FILE_FORMAT = (TYPE = JSON), y descarga los archivos con GET.
Los propios registros de Snowflake atrajeron mucha atención en 2024, cuando los atacantes usaron credenciales robadas para iniciar sesión en cuentas de clientes que no aplicaban MFA. El historial de inicio de sesión y consulta son ahora solicitudes estándar en una investigación. Prime Core tiene más de 24,000 reglas de detección únicas, mapeadas a 676 técnicas MITRE ATT&CK. A continuación se muestra cómo extraer los datos, desinfectarlos e investigarlos de forma gratuita en LogTotal.
Antes de comenzar
Acceso a ACCOUNT_USAGE. Por defecto, solo ACCOUNTADMIN puede leer estas vistas. Otros roles necesitan el permiso IMPORTED PRIVILEGES en la base de datos SNOWFLAKE, o uno de sus roles de base de datos.
Latencia y retención. Las vistas ACCOUNT_USAGE mantienen un año de historial pero se retrasan hasta un par de horas. Para los últimos siete días sin retraso, la función de tabla INFORMATION_SCHEMA.LOGIN_HISTORY es una alternativa.
Un almacén. Las consultas y descargas necesitan un almacén en funcionamiento, y consumen créditos. Filtrar por tiempo.
Opción 1: SnowSQL con salida JSON (extracciones pequeñas)
snowsql -q "SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE EVENT_TIMESTAMP >= '2026-10-19' AND EVENT_TIMESTAMP < '2026-10-20'"
-o output_format=json -o friendly=false -o timing=false > sf_logins_1019.json
jq -c '.[]' sf_logins_1019.json > sf_logins_1019.jsonl
Opción 2: Descargar a una etapa (exportaciones grandes)
COPY INTO @~/exports/login_history_1019/
FROM (
SELECT OBJECT_CONSTRUCT(*)
FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE EVENT_TIMESTAMP >= '2026-10-19' AND EVENT_TIMESTAMP < '2026-10-20'
)
FILE_FORMAT = (TYPE = JSON COMPRESSION = NONE)
OVERWRITE = TRUE;
Las descargas JSON necesitan una sola columna, por lo que la consulta envuelve cada fila en OBJECT_CONSTRUCT(*). Esa función omite campos NULL. Luego descarga desde tu etapa de usuario (@~):
GET @~/exports/login_history_1019/ file:///tmp/sf_export/;
y combina los archivos con cat /tmp/sf_export/* > sf_logins_1019.jsonl. El mismo patrón funciona para tus propias tablas de seguridad. Intercambia el nombre de la tabla y su columna de marca de tiempo.
Qué buscar en el historial de inicios de sesión
Busca inicios de sesión fallidos (IS_SUCCESS = ‘NO’) en ráfagas, y inicios de sesión con contraseña sin un segundo factor (SECOND_AUTHENTICATION_FACTOR vacío). Nota inicios de sesión desde IPs de cliente y tipos de cliente que no reconozcas. Luego sigue esas sesiones en QUERY_HISTORY para ver qué se leyó.
Subir, desinfectar y revisar en LogTotal
- Subir. Abre logtotal.com y suelta el archivo .jsonl.
- Desinfectar.
- Revisar.
Cuando algo sale mal
| Síntoma | Causa probable | Fix |
|---|---|---|
| El objeto no existe o no está autorizado en ACCOUNT_USAGE | El rol no tiene acceso a la base de datos SNOWFLAKE | Solicitar IMPORTED PRIVILEGES o un rol de base de datos |
| Inicio de sesión de hoy faltante | Latencia de ACCOUNT_USAGE | Usa INFORMATION_SCHEMA.LOGIN_HISTORY para eventos recientes |
| Error de COPY INTO sobre columnas | La descarga JSON necesita una columna | Envuelve filas en OBJECT_CONSTRUCT(*) |
| Campos faltantes en el JSON | OBJECT_CONSTRUCT omite valores NULL | Esperado; ausente significa NULL |
| Falla de GET | No ejecutado desde SnowSQL o el CLI de Snowflake | GET se ejecuta desde un cliente, no desde la interfaz web |
FAQ
¿Puedo hacer esto en la interfaz web?
Consultas, sí. Las descargas de la interfaz web no son JSON. La ruta del cliente anterior te da líneas JSON.
¿Qué hay de las tablas de eventos de Snowflake?
Las tablas de eventos contienen registros y trazas de tus propias funciones y aplicaciones. Expórtalos de la misma manera que cualquier tabla.