雪花掩蔽策略:输入可以是恒定的字符串变量吗?
我正在尝试创建带有标签的掩蔽策略:
CREATE OR REPLACE MASKING POLICY TAGS_MASKING
AS (val VARCHAR, col_name STRING) RETURNS VARCHAR ->
CASE
WHEN CURRENT_ROLE() IN ('ADMIN_ROLE') THEN val
WHEN CURRENT_ROLE() IN ('ANALYST_ROLE') AND (SELECT SYSTEM$GET_TAG('TAG_NAME', col_name , 'COLUMN') = 'PUBLIC') THEN val
WHEN CURRENT_ROLE() IN ('ANALYST_ROLE') AND (SELECT SYSTEM$GET_TAG('TAG_NAME', col_name , 'COLUMN') IN ('PROTECTED')) THEN '****MASKED****'
END;
在这里,col_name是字符串(例如'mytable.col1'),以便我可以将此掩码策略分配给我想要的任何列。但是,当我使用以下查询将其分配给一张表的一列时,它失败了:
ALTER TABLE IF EXISTS db.masking.mytable MODIFY COLUMN col1
SET MASKING POLICY TAGS_MASKING using (col1, 'mytable.col1');
错误消息是:
语法错误:意外的“ mytable.col1”
我应该如何解决这个问题?谢谢!
I am trying to create a masking policy with tagging:
CREATE OR REPLACE MASKING POLICY TAGS_MASKING
AS (val VARCHAR, col_name STRING) RETURNS VARCHAR ->
CASE
WHEN CURRENT_ROLE() IN ('ADMIN_ROLE') THEN val
WHEN CURRENT_ROLE() IN ('ANALYST_ROLE') AND (SELECT SYSTEM$GET_TAG('TAG_NAME', col_name , 'COLUMN') = 'PUBLIC') THEN val
WHEN CURRENT_ROLE() IN ('ANALYST_ROLE') AND (SELECT SYSTEM$GET_TAG('TAG_NAME', col_name , 'COLUMN') IN ('PROTECTED')) THEN '****MASKED****'
END;
Here, col_name is a string (e.g. 'mytable.col1'), so that I can assign this masking policy to any columns I want to. But when I used the following query to assign it to one column of one table, it failed:
ALTER TABLE IF EXISTS db.masking.mytable MODIFY COLUMN col1
SET MASKING POLICY TAGS_MASKING using (col1, 'mytable.col1');
The error message is:
Syntax error: unexpected "mytable.col1"
How should I figure this out? Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我尚未找到一种参数化列名称(将其作为可选的第二个参数传递)的方法,因此我使用了不同的方法。
它会使用雪花脚本自动创建每个colum的掩蔽策略。
设置:
过程:
呼叫:
输出:
检查:
输出:
“ rel =“ nofollow noreferrer”> policy_context :
I have not found a way to parametrize the column name(passing it as optional second parameter) so I have used a differnt approach.
It automatically creates a masking policy per colum using Snowflake Scripting.
Setup:
Procedure:
Call:
Output:
Check:
Output:
Test of select using POLICY_CONTEXT:
以前的答案可以通过使用新功能来改进:基于标签的掩蔽策略:
系统$ get_tag_on_current_column :
对于这种情况:
表:
分配标签:
actry_role/admis Analyst_role:
切换到Analyst_role(用
preectected
值标记的列):The previous answer could be improved by using new feature: Tag-based Masking Policies:
SYSTEM$GET_TAG_ON_CURRENT_COLUMN:
For this scenario:
Table:
Assigning tag:
Role outside ADMIN_ROLE/ANALYST_ROLE:
Switching to ANALYST_ROLE(column tagged with
PROTECTED
value):