You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何审计Snowflake中abcd数据库的查询执行人员与操作记录?

Snowflake实现abcd数据库全Query审计方案

Snowflake原生自带全量查询操作的审计能力,不需要额外部署采集组件,按以下步骤配置即可覆盖所有用户的操作记录,捕获执行用户、执行时间、操作内容等核心信息:

一、基础审计查询(零配置,默认开启)

Snowflake默认会留存账户内所有执行操作的记录,存储在内置系统视图SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY中,默认留存周期为1年,拥有账户监控权限的角色(如ACCOUNTADMIN)可以直接查询获取全量操作数据。
所有操作均为服务端层面采集,无论用户通过网页控制台、JDBC/ODBC驱动、第三方BI工具还是API发起操作,都无法绕过审计,不存在漏采问题。
视图默认包含的核心审计字段完全覆盖需求:执行用户名、执行时使用的角色、会话ID、执行开始/结束时间、SQL文本、执行状态、耗时、扫描数据量、客户端IP、客户端类型、操作关联的数据库/Schema/表对象、报错信息等。

直接用以下SQL即可查询abcd数据库的所有历史操作:

-- 切换到有权限查看全量审计记录的角色
USE ROLE ACCOUNTADMIN;

SELECT 
    USER_NAME AS 执行用户,
    ROLE_NAME AS 执行时所用角色,
    START_TIME AS 执行开始时间,
    END_TIME AS 执行结束时间,
    QUERY_TEXT AS 执行SQL内容,
    EXECUTION_STATUS AS 执行状态,
    ERROR_MESSAGE AS 失败报错信息,
    CLIENT_IP AS 客户端来源IP,
    CLIENT_APPLICATION AS 客户端工具类型,
    QUERY_ID AS 操作唯一标识
FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
WHERE 
    -- 筛选目标为abcd数据库的操作
    DATABASE_NAME = 'ABCD'
    -- 按需调整查询的时间范围,示例为近30天
    AND START_TIME >= DATEADD('day', -30, CURRENT_TIMESTAMP())
ORDER BY START_TIME DESC;

注意:普通用户默认只能查询自己发起的操作记录,只有被授予ACCOUNTADMIN、AUDITOR或全局MONITOR权限的角色,才能查看全量所有用户的操作日志。

二、长期审计留存配置(适配合规要求)

如果审计数据需要留存超过1年,或者要把审计数据存在自定义业务库中做后续分析,可以通过流+定时任务的方式,自动把增量审计数据同步到abcd库下的自有持久化表:

  1. 先在abcd库下创建审计专用的Schema和存储表
USE DATABASE ABCD;
-- 创建审计专用schema
CREATE SCHEMA IF NOT EXISTS AUDIT_LOG;
USE SCHEMA AUDIT_LOG;

-- 创建审计日志持久化表
CREATE TABLE IF NOT EXISTS ALL_QUERY_AUDIT (
    USER_NAME STRING,
    ROLE_NAME STRING,
    START_TIME TIMESTAMP_LTZ,
    END_TIME TIMESTAMP_LTZ,
    QUERY_TEXT STRING,
    EXECUTION_STATUS STRING,
    ERROR_MESSAGE STRING,
    CLIENT_IP STRING,
    CLIENT_APPLICATION STRING,
    QUERY_ID STRING PRIMARY KEY,
    SYNC_CREATE_TIME TIMESTAMP_LTZ DEFAULT CURRENT_TIMESTAMP()
);
  1. 配置增量流和定时同步任务,自动拉取新增的审计记录
-- 创建流对接系统审计视图,捕获增量新增的操作记录
CREATE STREAM IF NOT EXISTS QUERY_HISTORY_STREAM
ON VIEW SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
APPEND_ONLY = TRUE;

-- 创建每小时执行一次的同步任务,把abcd库相关的增量操作写入自有审计表
CREATE TASK IF NOT EXISTS SYNC_AUDIT_LOG_TASK
-- 替换为你自己账号下已有的可用计算仓库
WAREHOUSE = YOUR_EXISTING_WH
SCHEDULE = '60 MINUTE'
AS
INSERT INTO ABCD.AUDIT_LOG.ALL_QUERY_AUDIT (
    USER_NAME, ROLE_NAME, START_TIME, END_TIME, QUERY_TEXT,
    EXECUTION_STATUS, ERROR_MESSAGE, CLIENT_IP, CLIENT_APPLICATION, QUERY_ID
)
SELECT 
    USER_NAME, ROLE_NAME, START_TIME, END_TIME, QUERY_TEXT,
    EXECUTION_STATUS, ERROR_MESSAGE, CLIENT_IP, CLIENT_APPLICATION, QUERY_ID
FROM QUERY_HISTORY_STREAM
WHERE DATABASE_NAME = 'ABCD'
AND METADATA$ACTION = 'INSERT';

-- 启用同步任务
ALTER TASK SYNC_AUDIT_LOG_TASK RESUME;

三、可选增强:实时高危操作告警

如果需要对删库、删表、批量导出敏感数据这类高危操作做实时响应,可以基于审计流配置实时消费规则,触发后直接推送告警到企业内部的运维/安全渠道即可,不需要额外采购第三方审计工具。

内容的提问来源于stack exchange,提问作者jskrajareddy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:57:15