假设我们有一张桌子水果的详细信息,
国家 | 水果 |
---|---|
美国 | 苹果 |
印度 | 芒果 |
意大利 | 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的策略作为预览。