“Snowflake 日志”意指两种情况,导出方式对两者相同。可以是您的团队存储在 Snowflake 表中的安全数据。或者它可能是 Snowflake 自己的审计记录,如 LOGIN_HISTORY 和 QUERY_HISTORY 的 SNOWFLAKE.ACCOUNT_USAGE 视图。对于小量数据,使用 SnowSQL 以 JSON 输出运行查询。对于更大的数据,使用 FILE_FORMAT = (TYPE = JSON) 更新现有 stage 并使用 COPY INTO 卸载,然后用 GET 下载文件。
Snowflake 自己的日志在 2024 年引起了很多关注,当时攻击者利用被盗凭证登录到未强制执行 MFA 的客户账户。登录和查询历史记录现在是调查中的标准要求。Prime Core 具有超过 24,000 个独特的检测规则,映射到 676 个 MITRE ATT&CK 技术。下面是如何获取数据、清理数据,以及在 LogTotal 中免费调查数据的方法。
开始之前
访问 ACCOUNT_USAGE. 默认情况下,只有 ACCOUNTADMIN 可以读取这些视图。其他角色需要在 SNOWFLAKE 数据库或其数据库角色上授予 IMPORTED PRIVILEGES 权限。
延迟和保留。 ACCOUNT_USAGE 视图保存一年的历史记录,但可能会延迟几个小时。对于没有延迟的最近七天,可以使用 INFORMATION_SCHEMA.LOGIN_HISTORY 表函数作为替代。
仓库。 查询和卸载需要运行的仓库,并且会消耗积分。按时间过滤。
选项 1:使用 JSON 输出的 SnowSQL(小批量)
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
选项 2:卸载到 stage(大批量导出)
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;
JSON 卸载需要一个列,这就是查询将每行包装在 OBJECT_CONSTRUCT(*) 中的原因。该函数会省略 NULL 字段。然后从您的用户阶段(@~)下载:
GET @~/exports/login_history_1019/ file:///tmp/sf_export/;
并用 cat /tmp/sf_export/* > sf_logins_1019.jsonl 将文件合并。您的安全表可以使用相同的模式。替换表名称及其时间戳列。
在登录历史中寻找什么
注意失败的登录(IS_SUCCESS = ‘NO’)以及没有第二因素的密码登录(SECOND_AUTHENTICATION_FACTOR 为空)。记录来自未知客户端 IP 和客户端类型的登录。然后跟踪这些会话到 QUERY_HISTORY 以查看读取了什么。
在 LogTotal 上上传、清理和审核
- 上传。 打开 logtotal.com 并拖入 .jsonl 文件。
- 清理。
- 审核。
当出现问题时
| 症状 | 可能的原因 | Fix |
|---|---|---|
| 对象不存在或未授权访问 ACCOUNT_USAGE | 角色缺少对 SNOWFLAKE 数据库的访问权限 | 请求 IMPORTED PRIVILEGES 或数据库角色 |
| 今天的登录缺失 | ACCOUNT_USAGE 延迟 | 使用 INFORMATION_SCHEMA.LOGIN_HISTORY 查找最近的事件 |
| COPY INTO 关于列的错误 | JSON 卸载需要一个列 | 用 OBJECT_CONSTRUCT(*) 包装行 |
| JSON 中缺少字段 | OBJECT_CONSTRUCT 会省略 NULL 值 | 预期结果;缺失意味着 NULL |
| GET 失败 | 没有从 SnowSQL 或 Snowflake CLI 运行 | GET 从客户端运行,而不是从网页 UI |
FAQ
我可以在网页界面上完成这项工作吗?
查询可以。网页界面下载不是 JSON 格式。上述客户端路线可以为您提供 JSON 行。
Snowflake 事件表呢?
事件表保存来自您自己功能和应用程序的日志和跟踪。像导出任何表一样导出它们。