如何将列中的每一行设置为等于特定字符串?

How do I set every row in a column equal to a specific string?

我有一些要设置为字符串 'redacted' 的列,因为它们包含个人信息。

目前我正在通过 select 语句从原始表在雪花中创建视图如何将指定的字符串添加到特定列?

原创

name    number
john   | 1
mary   | 2
nikhil | 3

理想状态

name      number
Redacted | 1
Redacted | 2
Redacted | 3

实现视图的当前代码

CREATE OR REPLACE SECURE VIEW "DB"."Schema"."Table"
AS
SELECT
    Column1,
    Column2,
    Column3,
FROM "DB"."Schema"."Table"

Snowflake 允许动态屏蔽 PII。

一般来说你必须:

1:将屏蔽策略权限授予自定义角色

-- create a masking policy administrator custom role

CREATE ROLE masking_admin;

-- grant privileges to masking_admin role.

GRANT CREATE MASKING POLICY on SCHEMA <schema_name> to ROLE masking_admin;

GRANT APPLY MASKING POLICY on ACCOUNT to ROLE masking_admin;

-- allow table_owner role to set or unset the ssn_mask masking policy (optional)

GRANT APPLY ON MASKING POLICY ssn_mask to ROLE table_owner;

2:创建屏蔽策略

create or replace masking policy email_mask as (val string) returns string ->
  case
    when current_role() in ('ANALYST') then val
    else '*********'
  end;

3:将屏蔽策略应用于 Table 或查看列

-- apply masking policy to a table column

alter table if exists user_info modify column email set masking policy email_mask;

-- apply the masking policy to a view column

alter view user_info_v modify column email set masking policy email_mask;

在我完全从 this page 复制的上面的示例中,我们为屏蔽规则的安全管理员创建了一个角色,然后使用该角色创建了一个屏蔽策略,允许 ANALYST 角色查看列的值,但向不属于 ANALYST 角色的其他所有人显示星号,然后将该屏蔽规则应用于 table 和视图的电子邮件列。

这样做的好处是,您可以定义一种一致的方法来隐藏此类信息(通过策略),并且您不必 hard-code 更改您的视图。

我想你想要这个,只需在视图中将 name 定义为常量即可:

CREATE OR REPLACE SECURE VIEW "DB"."Schema"."Table"
AS
SELECT
    'redacted' name,
    number
FROM "DB"."Schema"."Table"

(但您为视图提供的代码与预期结果不符)