使用父角色时动态掩码的雪花行为

snowflake behavior of Dynamic masking in case of using parent Role

这与其说是一个问题本身,不如说是一种澄清。

我有一个名为 temp_parent_role 的父角色,它有两个子角色 temp_role 和 temp_role_2。 现在我有一个 table,其访问权限被授予两个角色,但是有一个动态策略附加到 temp_role_2,如下所示。

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

alter table if exists COE_INFO.POC.COL_TABLE modify column COL2 set masking policy col_mask1;

现在,正如预期的那样,当我使用 temp_role 时,我可以看到 column2 被屏蔽了,而当我使用 temp_role_2 时,我可以看到 table 中的实际数据。

但是,当我使用父角色时 (temp_parent_role)。该列被屏蔽了,所以基本上 parent_role 似乎正在考虑将看到屏蔽数据的角色。会一直这样吗

而且如果我要parent_role考虑可以看到unmask数据的角色,那么可以吗。

您在 DDM 定义中利用 current_role(),这意味着只有 TEMP_ROLE_2 可以看到未屏蔽的数据,而其他所有活动角色都不会。 parent 看到屏蔽数据的原因是它不是 TEMP_ROLE_2 并且属于您的案例陈述的 ELSE

情况总是如此,除非您更改逻辑以包含 parent 角色或更改您在 DDM 策略中使用的功能。例如,您可以改为执行类似这样的操作,这样 TEMP_ROLE_2 以上的所有角色都可以看到未屏蔽的数据:

create or replace masking policy col_mask1 as (val string) returns string ->
  case
    when is_role_in_session('TEMP_ROLE_2') = True then val
    else '*********'
  end;

这应该为您提供 TEMP_ROLE_2TEMP_PARENT_ROLE

的未屏蔽数据