雪花中的行级访问控制

Posted

技术标签:

【中文标题】雪花中的行级访问控制【英文标题】:Row level access control in snowflake 【发布时间】:2019-11-26 18:36:44 【问题描述】:

我有一个客户拥有一家地毯清洁公司,我们在多租户数据库模型中拥有他所有不同加盟商的数据,我们希望将这些数据移动到雪花中的数据仓库中。我不想为每个客户建立一个单独的数据库,因为这样我就必须使每个数据库都与最新的数据模型保持同步。我想使用 1 个数据模型来统治它们。我有一个租户 ID,我将其与每条记录一起保存,以识别加盟商的数据。我想为每个加盟商提供一组凭据,以便他们可以连接他们选择的分析工具(tableau、power bi 等),并且只能访问适用于他们的行。有没有办法根据用户来保护他们在每个表中看到的行。换句话说,某种类似于 postgres 中的配置文件的行级访问控制。有没有更好的方法来处理这种情况?最终,我希望维护和管理最少数量的 elt 作业和数据模型。

【问题讨论】:

【参考方案1】:

这是以太Secure Views或Reader Accounts的目的。

我们同时使用这两种方法,而且它们的技术麻烦/设置成本大致相同。但我们正在使用内部工具来构建/更改架构。

【讨论】:

这里有一个很好的例子:docs.snowflake.net/manuals/user-guide/…【参考方案2】:

扩展西蒙的回答:

您可以拥有一个 Snowflake 帐户并为每个加盟商创建一个 Snowflake 角色和用户。这些角色可以访问使用 CURRENT_ROLE / CURRENT_USER 上下文函数的安全视图,如 Snowflake 文档中的this example 中所示。

您必须有一个角色 -> 租户 ID“映射表”,它在安全视图中用于将行限制为正确的加盟商。

【讨论】:

所以换句话说,我将创建一个 current_user 到租户 id 的映射表,然后创建连接到映射表并使用 current_user 作为视图中的过滤器的安全视图。 是的,你明白了!

以上是关于雪花中的行级访问控制的主要内容,如果未能解决你的问题,请参考以下文章

MySQL中的行级锁,表级锁,页级锁

MySQL中的行级锁表级锁页级锁

FlinkSQL 的行级权限解决方案及源码

[数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁

[数据库事务与锁]详解五: MySQL中的行级锁,表级锁,页级锁

组的行级安全性或使组可以访问行