基本沙盒:设置行级权限
学习如何根据人的用户属性设置行级权限。
Metabase的专业版和企业版包括数据沙盒,这是一个功能,它让你可以细粒度地控制人们可以在问题中看到和使用哪些行和列。
“沙盒”通常指的是用于保护或隔离系统一部分的隔离环境。Metabase以类似的方式使用沙盒,但在这个案例中,隔离环境指的是“数据环境”。当管理员授权一个组对表进行沙盒访问时,他们只能看到沙盒中包含的行和列。
在这篇文章中,我们将通过一个示例来介绍如何使用Metabase中包含的示例数据库设置基本沙盒。基本沙盒限制对行的访问;对于列级权限,请参阅自定义数据沙盒。
在沙盒之前
你应该备份你的Metabase应用程序数据。此外,你可能还想查看我们的数据权限指南、集合权限指南和我们的权限概述,以更好地了解沙盒如何与Metabase的权限系统相结合。
我们的场景
我们的目标是确保客户布朗女士只能看到与她账户相关的表行。
创建客户组
Metabase使用组来组织权限,因此我们首先需要创建一个组,我们将它称为客户组。为此,请点击导航侧边栏中的齿轮图标,然后选择 > 管理设置 > 人员 > 组。然后选择创建组。
创建账户并添加属性
在我们可以为客户组设置沙盒权限之前,我们需要为布朗女士创建一个账户,并向她的账户添加一个属性。从 管理设置 > 人员 选项卡,我们将点击 邀请某人,填写姓名和电子邮件字段,并将其添加到客户组。
下面是沙盒的重要部分:我们将为我们的新人员布朗女士添加一个具有键user_id
和值为20
的属性。
user_id
键没有什么神奇之处:它只是一个变量。我们可以添加我们选择的键值对属性。我们想要的是使用与列相对应的键,以及与行值相对应的值,为我们想要沙盒的相关表。我们的想法是将这个属性链接到表中的一个列,以确定布朗女士可以查看哪些行。
为了演示的目的,我们手动设置了这个属性,但我们可以使用单点登录服务(SSO),如SAML,以编程方式分配和同步属性到用户。
授予组沙盒访问权限
现在我们已经有了我们的组,并且该组至少有一个具有属性(布朗女士)的成员,我们准备前往数据权限页面,授予客户组对示例数据库中的表进行沙盒访问的权限。
在左侧边栏中,我们将点击数据库和示例数据库。要授予客户组对订单
表的沙箱视图数据访问权限,我们只需点击订单
表,导航到客户行,并在视图数据列中,从下拉菜单中选择沙箱。
沙箱模式会询问“您想如何为此组的用户过滤此表?”并展示两个选项
- 通过表中的某一列进行筛选。
- 使用保存的问题为此表创建自定义视图。
目前,我们将保持设置为通过表中的某一列进行筛选——使用保存的问题是更高级的功能,我们将在这里讨论。
对于列,我们将选择订单
表的用户ID
列,并将其与分配给人员的属性下拉菜单中的user_id
属性连接。
Metabase将向我们提供我们已做的更改的摘要:“客户组的用户可以查看订单
表中的行,其中用户ID
字段等于user_id
。”让我们保存我们的更改,并重复此过程为人员
表。
- 授予客户组对
人员
表的沙箱访问权限。 - 选择通过列筛选选项。
- 选择
人员
表的ID
列,并将其与user_id
属性连接。 - 查看摘要并点击保存。
最后,我们需要点击保存更改按钮以确认我们的更改。
以布朗女士的视角查看设置
现在,让我们测试我们的设置以确认我们的客户,布朗女士,只能看到与她用户ID相关的订单。我们将在隐身浏览器窗口中打开我们的Metabase实例,并以布朗女士的身份登录。当我们导航到订单
表时,布朗女士将只能看到她下过的订单(用户ID 20)。
通过沙箱化表,我们可以创建单个问题或仪表板,并放心,只有具有该数据沙箱访问权限的人才能看到与他们的账户相关的数据。
如果我们结合沙箱化与交互式嵌入,我们可以在我们的应用程序中嵌入这些仪表板,并使用SSO将属性传递到嵌入的Metabase实例,允许我们在我们的应用程序中提供沙箱访问问题和对仪表板。要了解更多信息,请参阅如何在您的应用程序中嵌入Metabase以提供多租户、自助分析。
沙箱化限制
- 沙箱化仅适用于SQL数据库。
- 用户在每个表中只能有一个沙箱,因此请只将用户添加到具有对表沙箱访问权限的单个组。
- 如果组具有对数据库的SQL查询访问权限,沙箱化无法阻止该组的成员查看这些表中的数据。
- 由此延伸,如果该组的成员有权访问用SQL编写的查询,则这些查询不会意识到沙箱化访问权限,并将向该组的成员显示所有结果,而不仅仅是该组沙箱中的结果。
了解更多关于数据沙箱化限制的信息。
进一步阅读
下一步:自定义沙箱:限制对列的访问
了解如何使用保存的SQL查询显示对不同人员不同的行和列。