通过为角色分配安全视图并在多种条件下提供过滤器,在Snowflake上实现行级安全(RLS)



假设我们有一张桌子水果的详细信息,

国家 水果
美国 苹果
印度 芒果
意大利 Kiwi
澳大利亚 Guava

我们当然可以使用安全视图来实现这一点,但只使用一个安全视图是否可以实现

我不确定我是否正确理解你的问题,但视图就是视图,你可以写任何你想要的逻辑:

CREATE OR REPLACE SECURE VIEW Fruits_v
COPY GRANTS
AS
SELECT *
FROM Fruits
WHERE (current_role(), region) IN ( ('region1_role', 'USA',
,('region1_role', 'Australia')
,('region2_role', 'Italy')
,('region2_role', 'India')
)
OR current_role() = 'global_role';

悬而未决的问题是如何保持这种方法。添加新角色时,您需要更新视图定义,而不是将新行添加到驱动表中。


推荐阅读:了解行级安全性并使用策略方法。

让我们从实现RLS开始,其中区域仅限于一个国家。让此表位于
数据库:Fruits_DB
架构:Fruits_Schema
表:Fruits

国家 水果
美国 苹果
印度 芒果
意大利 Kiwi
澳大利亚 Guava

为什么不使用UDF和权利/映射表?同样,即将到来的行级访问将在GA时工作。我看到了Snowflake的推荐阅读。现在UDF可以在更多的地方使用。或者,您可以在企业版中使用Snowflake的策略作为预览。

最新更新