如何强制 Snowflake 用户使用列值(例如日期/时间戳)过滤表中的结果?

Fel*_*ffa 5 sql snowflake-cloud-data-platform

在讨论如何阻止 Snowflake 用户在表上运行时,我们遇到了一个select *相关问题:“如果有一种方法可以执行类似的操作,在日期/时间戳列上强制执行 where 子句

在此输入图像描述

那么,如何强制 Snowflake 用户在查询表时使用一定范围的日期呢?

Fel*_*ffa 3

注意:使用表 UDFS 检查更干净的解决方案


解决此问题的一种方法是在表上创建视图。该视图的第一行应该充满无效计算,以及正常日期范围之外的日期/时间戳:

create or replace table mytable3(i number, s string, d date);

insert into mytable3 values (1, 2, '2020-01-01');

create or replace secure view mytable3_view 
as
select 'you need to add a date filter'::int i, 'you need to add a date filter'::int s, '1-1-1'::date d
union all
select * 
from mytable3
;
Run Code Online (Sandbox Code Playgroud)

现在,每当有人查询该视图时,只要他们没有过滤掉不适当的日期,它就会抛出一个描述性错误:

select i, s
from mytable3_view
--where d > '2000-01-01'
;

-- Numeric value 'you need to add a date filter' is not recognized
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

请注意,通过a,secure view我们可以管理权限,以便分析师只能通过视图获取数据,而无需授予他们访问基础表的权限。

额外学分: