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