Snowflake Dynamic Masking 屏蔽了所有角色的列,包括我未屏蔽的角色
Posted
技术标签:
【中文标题】Snowflake Dynamic Masking 屏蔽了所有角色的列,包括我未屏蔽的角色【英文标题】:Snowflake Dynamic Masking masks the column for all roles including the one I have unmasked 【发布时间】:2020-07-17 01:19:55 【问题描述】:我能够成功创建屏蔽策略并将其应用于表中的列。但是,该列最终被所有角色屏蔽,包括我取消屏蔽该列的角色。我写的代码见下文。 PII_ROLE 不应看到表中的屏蔽值,但该角色也可以看到屏蔽值。任何帮助我找出错误所在的帮助将不胜感激:
CREATE or replace masking policy masking_policies.ddm_policies.email_mask AS (val string)
returns string ->
CASE
WHEN current_role() IN ('PII_ROLE') THEN val
ELSE '*MASKED*'
END;
【问题讨论】:
【参考方案1】:您在 when 子句中输入的条件似乎失败,这可能与您指定的角色名称 PII_ROLE 不匹配。检查它是否应该是正确的名称。这是一个小型 POC,您可以使用它来验证您的步骤。
//Start of the POC
use role accountadmin; //You can set any role that you want
create or replace database mydbtest;
use schema public;
create or replace table pinfo
( FirstName varchar(20),
LastName varchar(20),
email varchar(50)
);
insert into pinfo values
('Sarah', 'Janes','sarah.janes@hotmail.com'),
('Richard', 'Hays','richard.hays@gmail.com'),
('Maria', 'Khan','maria.khan@wow.com');
// masking policy to mask email column. Only ACCOUNTADMIN role can see the actual values
// all other will see the masked
create or replace masking policy email_mask as (val string) returns string ->
case
when current_role() in ('ACCOUNTADMIN') then val
else '*MASKED*'
end;
// Modify table and apply the policy
alter table pinfo modify column email set masking policy email_mask;
// Query table you will see actual values in email column
select * from pinfo;
// Now grant object access to role public
grant usage on database mydbtest to public;
grant usage on schema mydbtest.public to public;
grant select on pinfo to public;
// Set the role to public
use role public;
use schema public;
// Now Query table you will see the masked values in email column
select * from pinfo;
[Masked Values][1]
//Change the role back to ACCOUNTADMIN
use role accountadmin;
// You will see the actual values
select * from pinfo;
[Actual Values][2]
【讨论】:
我今天解决了!我写的代码很好。我需要将该角色应用于 SYSADMIN 以外的用户。我创建了一个新用户,分配了角色,一切都很完美。新的动态数据屏蔽非常简单。我只是没有意识到管理员角色具有“最严格的类型安全性”,这就是它需要新用户/角色的原因。以上是关于Snowflake Dynamic Masking 屏蔽了所有角色的列,包括我未屏蔽的角色的主要内容,如果未能解决你的问题,请参考以下文章
Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码
[LeetCode] Masking Personal Information 给个人信息打码
Unity Shader------遮罩反射(Masking Reflection)