列级与行级安全

Snowflake 管理、治理与协作

Emily Melhuish

Technical Curriculum Developer, Snowflake

表级访问的问题

具有表级访问的 Users 表

  • Claro 的 users 表包含姓名、邮箱、信用评分与信用分段
  • 向 analyst 角色授予 SELECT 会暴露所有列
  • 活动分析师不需要原始信用评分
  • 表级访问控制无法细分到此程度
Snowflake 管理、治理与协作

什么是列级安全?

  • 列仍出现在结果中,仅值被改变
  • 特权角色见真实值;非特权角色见遮蔽值
  • 遮蔽在查询时基于查询角色进行,即动态数据遮蔽

列级安全示意图

Snowflake 管理、治理与协作

动态数据遮蔽

两个表的示意图:一个启用动态数据遮蔽,一个未启用

Snowflake 管理、治理与协作

创建并应用遮蔽策略

CREATE MASKING POLICY mask_credit_score
  AS (val NUMBER) RETURNS NUMBER ->
  CASE
    WHEN IS_ROLE_IN_SESSION('CREDIT_ADMIN') THEN val
    ELSE -9999
  END;

ALTER TABLE core.users
  MODIFY COLUMN credit_score
  SET MASKING POLICY mask_credit_score;
  • CURRENT_ROLE 返回激活的主角色
1 https://docs.snowflake.com/en/sql-reference/sql/create-masking-policy#example-normal-masking-policy
Snowflake 管理、治理与协作

External Tokenization

  • 动态数据遮蔽的替代方案
  • 需要第三方代币化服务和 External Function
  • 将敏感值替换为在各系统一致的令牌
  • 当需在 Snowflake 外识别同一令牌时很有用

外部代币化示意图

1 https://docs.snowflake.com/en/user-guide/security-column-ext-token-use
Snowflake 管理、治理与协作

什么是行级安全?

两张表,分析师仅能查看特定行

Snowflake 管理、治理与协作

行访问策略的工作原理

示意:US_ANALYST 查询经行访问策略过滤仅返回 US 行,EU_ANALYST 同一查询仅返回 EU 行

  • 策略基于查询角色评估并应用过滤
Snowflake 管理、治理与协作

创建并应用行访问策略

CREATE ROW ACCESS POLICY region_filter
  AS (region_col VARCHAR) RETURNS BOOLEAN ->
  CASE
    WHEN IS_ROLE_IN_SESSION('US_ANALYST') THEN region_col = 'US'
    WHEN IS_ROLE_IN_SESSION('EU_ANALYST') THEN region_col = 'EU'
    ELSE FALSE
  END;

ALTER TABLE core.users
  ADD ROW ACCESS POLICY region_filter ON (region);
Snowflake 管理、治理与协作

联合使用数据遮蔽与行访问策略

动态数据遮蔽与行访问策略

Snowflake 管理、治理与协作

¡Vamos a practicar!

Snowflake 管理、治理与协作

Preparing Video For Download...