安全合规审计指南

云器 Lakehouse 提供完整的安全审计能力,帮助企业满足等保 2.0、SOC 2、GDPR 等合规要求,以及内部审计需求。

审计能力全景

审计维度数据来源查询方式
操作审计作业历史记录
sys.information_schema.job_history
sys.information_schema.job_history
数据访问审计作业输入/输出表
job_history.input_tables
job_history.input_tables
/
output_tables
output_tables
数据变更审计表版本历史
DESC HISTORY table_name
DESC HISTORY table_name
权限变更审计账户中心审计功能Studio Web 界面
登录与网络审计账户中心审计功能Studio Web 界面

两种审计视角

  • 账户级审计:通过账户中心的「审计」功能,查看全实例范围的操作记录、登录记录、权限变更记录
  • 工作空间级审计:通过 SQL 查询
    information_schema
    information_schema
    ,分析特定工作空间内的作业执行、数据访问模式

操作审计(谁在什么时间做了什么)

通过账户中心查看操作审计

登录账户中心(accounts.clickzetta.com),进入 审计 → 操作审计,可查看:

  • 所有用户的 SQL 执行记录
  • DDL 操作(CREATE / DROP / ALTER)
  • 权限变更操作(GRANT / REVOKE)
  • 按时间范围、用户、操作类型筛选

通过 SQL 查询作业历史

-- 查询近 7 天所有作业执行记录 SELECT job_id, workspace_name, job_creator AS operator, job_type, status, start_time, end_time, execution_time, LEFT(job_text, 200) AS sql_preview FROM sys.information_schema.job_history WHERE start_time >= CURRENT_DATE() - INTERVAL 7 DAY ORDER BY start_time DESC LIMIT 100;

DDL 变更审计

-- 查询近 30 天所有 DDL 操作(CREATE / DROP / ALTER) SELECT job_id, workspace_name, job_creator AS operator, job_type, start_time, LEFT(job_text, 300) AS ddl_statement FROM sys.information_schema.job_history WHERE start_time >= CURRENT_DATE() - INTERVAL 30 DAY AND job_type IN ('CREATE', 'DROP', 'ALTER') ORDER BY start_time DESC;

按用户审计操作记录

-- 统计每个用户的作业数量和成功率 SELECT job_creator AS user_name, COUNT(*) AS total_jobs, SUM(CASE WHEN status = 'SUCCESS' THEN 1 ELSE 0 END) AS success_jobs, SUM(CASE WHEN status = 'FAILED' THEN 1 ELSE 0 END) AS failed_jobs, ROUND(SUM(CASE WHEN status = 'SUCCESS' THEN 1 ELSE 0 END) * 100.0 / COUNT(*), 2) AS success_rate FROM sys.information_schema.job_history WHERE start_time >= CURRENT_DATE() - INTERVAL 30 DAY GROUP BY job_creator ORDER BY total_jobs DESC;


数据访问审计(谁看了什么数据)

敏感表访问记录

-- 查询访问特定表的作业记录 SELECT job_id, job_creator AS operator, workspace_name, start_time, status, execution_time, LEFT(job_text, 200) AS sql_preview FROM sys.information_schema.job_history WHERE start_time >= CURRENT_DATE() - INTERVAL 7 DAY AND input_tables LIKE '%sensitive_table_name%' ORDER BY start_time DESC;

数据导出审计

-- 查询 COPY INTO 导出操作 SELECT job_id, job_creator AS operator, workspace_name, start_time, execution_time, LEFT(job_text, 300) AS export_statement FROM sys.information_schema.job_history WHERE start_time >= CURRENT_DATE() - INTERVAL 30 DAY AND job_text LIKE '%COPY INTO%' AND (job_text LIKE '%VOLUME%' OR job_text LIKE '%LOCATION%') ORDER BY start_time DESC;

异常访问模式检测

-- 检测非工作时间(22:00-06:00)的大批量数据读取 SELECT job_id, job_creator AS operator, workspace_name, start_time, HOUR(start_time) AS access_hour, CAST(input_bytes AS BIGINT) / 1024 / 1024 AS data_read_mb, LEFT(job_text, 200) AS sql_preview FROM sys.information_schema.job_history WHERE start_time >= CURRENT_DATE() - INTERVAL 30 DAY AND HOUR(start_time) NOT BETWEEN 6 AND 22 AND CAST(input_bytes AS BIGINT) > 1024 * 1024 * 1024 -- 读取超过 1GB ORDER BY start_time DESC;

跨工作空间数据访问

-- 查询跨工作空间访问数据的作业 SELECT DISTINCT j.workspace_name AS source_workspace, GET_JSON_OBJECT(j.input_tables, '$.table[0].namespace[0]') AS accessed_workspace, GET_JSON_OBJECT(j.input_tables, '$.table[0].tableName') AS accessed_table, j.job_creator AS operator, j.start_time FROM sys.information_schema.job_history j WHERE j.start_time >= CURRENT_DATE() - INTERVAL 7 DAY AND j.input_tables IS NOT NULL AND j.input_tables != '{"table":[]}' AND GET_JSON_OBJECT(j.input_tables, '$.table[0].namespace[0]') != j.workspace_name ORDER BY j.start_time DESC;


数据变更审计(数据被怎么改了)

表结构变更历史

-- 查看表的变更历史(DDL 操作记录) DESC HISTORY table_name;

返回结果包含:

  • 操作类型(CREATE / ALTER / DROP)
  • 操作时间
  • 操作人
  • 变更内容

数据变更回溯(Time Travel)

-- 查看表在某个时间点的数据快照 SELECT * FROM table_name TIMESTAMP AS OF '2025-06-01 10:00:00'; -- 对比两个时间点的数据差异(时间戳必须是字面量,不支持表达式) SELECT * FROM table_name TIMESTAMP AS OF '2025-06-01 10:00:00' WHERE id NOT IN ( SELECT id FROM table_name TIMESTAMP AS OF '2025-06-01 09:00:00' );

误操作恢复审计

-- 查看表的所有历史版本 DESC HISTORY table_name; -- 恢复到指定版本 RESTORE TABLE table_name TO VERSION version_number;


权限变更审计

通过账户中心查看权限变更

登录账户中心,进入 审计 → 权限审计,可查看:

  • GRANT / REVOKE 操作记录
  • 角色创建 / 删除记录
  • 用户加入 / 移出工作空间记录
  • 按时间范围、操作人、目标用户筛选

当前权限状态快照

-- 查看所有用户的角色分配 SELECT user_name, role_names, workspace_name FROM information_schema.users WHERE role_names IS NOT NULL AND role_names != '' ORDER BY user_name; -- 查看所有角色的分配情况 SELECT role_name, user_names, comment FROM information_schema.roles ORDER BY role_name;

高权限用户审计

-- 查询拥有 admin 权限的用户 SELECT user_name, role_names, workspace_name FROM information_schema.users WHERE role_names LIKE '%admin%' ORDER BY workspace_name, user_name;


登录与网络访问审计

通过账户中心查看登录审计

登录账户中心,进入 审计 → 登录审计,可查看:

  • 用户登录记录(时间、IP、客户端类型)
  • 登录失败记录
  • 异常登录检测(异地登录、频繁失败)

网络策略命中记录

-- 查看当前生效的网络策略 SHOW NETWORK POLICY; -- 查看网络策略详情 DESC NETWORK POLICY policy_name;


合规报告模板

等保 2.0 审计项对照

等保要求Lakehouse 实现方式审计查询
身份鉴别MFA / SSO账户中心 → 登录审计
访问控制RBAC / 行级权限 / 动态脱敏
SHOW GRANTS
SHOW GRANTS
+ 权限审计
安全审计操作审计 + 数据访问审计
job_history
job_history
+ 账户中心审计
数据完整性Time Travel + RESTORE
DESC HISTORY
DESC HISTORY
数据保密性存储加密 / BYOK / 网络策略Studio 安全配置

定期审计报告生成

-- 生成月度安全审计摘要(时间范围用字面量填写,如 '2025-05-01') SELECT '审计周期' AS item, '2025-05-01 至 2025-05-31' AS value UNION ALL SELECT '总作业数', CAST(COUNT(*) AS STRING) FROM sys.information_schema.job_history WHERE start_time >= '2025-05-01' AND start_time < '2025-06-01' UNION ALL SELECT '成功作业数', CAST(SUM(CASE WHEN status = 'SUCCESS' THEN 1 ELSE 0 END) AS STRING) FROM sys.information_schema.job_history WHERE start_time >= '2025-05-01' AND start_time < '2025-06-01' UNION ALL SELECT '失败作业数', CAST(SUM(CASE WHEN status = 'FAILED' THEN 1 ELSE 0 END) AS STRING) FROM sys.information_schema.job_history WHERE start_time >= '2025-05-01' AND start_time < '2025-06-01' UNION ALL SELECT '活跃用户数', CAST(COUNT(DISTINCT job_creator) AS STRING) FROM sys.information_schema.job_history WHERE start_time >= '2025-05-01' AND start_time < '2025-06-01' UNION ALL SELECT 'DDL 操作数', CAST(COUNT(*) AS STRING) FROM sys.information_schema.job_history WHERE start_time >= '2025-05-01' AND start_time < '2025-06-01' AND job_type IN ('CREATE', 'DROP', 'ALTER') UNION ALL SELECT '权限变更次数', '通过账户中心审计功能查看';

审计数据保留建议

数据类型建议保留周期说明
作业历史90 天
sys.information_schema.job_history
sys.information_schema.job_history
默认保留
表版本历史
data_retention_days
data_retention_days
设置
默认 1 天,可调整至 90 天
账户中心审计记录按账户中心配置建议至少保留 180 天

自动化审计实践

创建审计监控视图

-- 创建每日审计摘要视图 CREATE VIEW daily_audit_summary AS SELECT DATE(start_time) AS audit_date, workspace_name, COUNT(*) AS total_jobs, SUM(CASE WHEN status = 'SUCCESS' THEN 1 ELSE 0 END) AS success_jobs, SUM(CASE WHEN status = 'FAILED' THEN 1 ELSE 0 END) AS failed_jobs, COUNT(DISTINCT job_creator) AS active_users, SUM(CASE WHEN job_type IN ('CREATE', 'DROP', 'ALTER') THEN 1 ELSE 0 END) AS ddl_operations, SUM(CAST(input_bytes AS BIGINT)) / 1024 / 1024 / 1024 AS total_data_read_gb FROM sys.information_schema.job_history GROUP BY DATE(start_time), workspace_name;

定期审计任务调度

在 Studio 中创建周期性 SQL 任务,每日执行审计查询并导出结果:

-- 每日安全审计任务 INSERT INTO audit_log SELECT CURRENT_TIMESTAMP() AS audit_time, 'daily_security_check' AS check_type, COUNT(*) AS anomaly_count, '非工作时间大批量数据读取' AS description FROM sys.information_schema.job_history WHERE DATE(start_time) = CURRENT_DATE() - INTERVAL 1 DAY AND HOUR(start_time) NOT BETWEEN 6 AND 22 AND CAST(input_bytes AS BIGINT) > 1024 * 1024 * 1024;

告警规则配置

告警场景检测条件建议动作
异常数据导出单日 COPY INTO 操作 > 5 次通知安全管理员
高权限用户异常操作admin 用户在非工作时间执行 DDL立即复核
大量失败作业单用户失败率 > 50%检查 SQL 或权限配置
敏感表访问未授权用户访问敏感表触发权限审计

审计最佳实践

  1. 定期执行审计:建议每周执行一次操作审计,每月执行一次完整合规审计
  2. 保留审计记录:确保审计数据保留周期满足合规要求(通常 ≥ 180 天)
  3. 分离审计权限:审计人员应拥有只读权限,不应具备数据修改权限
  4. 自动化监控:将常用审计查询配置为周期性任务,异常时自动告警
  5. 结合账户中心:SQL 查询 + 账户中心审计功能配合使用,覆盖全量审计场景

相关文档

联系我们
预约咨询
微信咨询
电话咨询
邮件咨询