数据沙箱示例

数据沙箱仅在 ProEnterprise 计划(自托管和 Metabase 云)中可用。

数据沙箱 允许您

以下所有示例的设置

以下示例使用 Metabase 附带的示例数据库。这是基本设置

  1. 阻止所有用户组的权限:按 cmd/ctrl + k 以调出命令面板,并搜索“Permissions”。在权限 > 数据选项卡中。单击所有用户组。对于示例数据库,将所有用户的查看数据权限设置为“已阻止”。

  2. 创建一个名为 Customers 的群组。按 cmd/ctrl + k 并搜索人员设置。[创建一个名为“Customers”的群组。

  3. 为 Cloyd Beer 创建一个用户账户。我们将创建一个用户账户,为来自我们示例数据库 People 表的随机人员。我们选择示例数据库 People 表中的 Cloyd Beer

  4. 向账户添加用户属性:我们将向 Cloyd 的账户添加用户属性。由于我们希望能够按用户 ID 筛选数据,我们将从示例数据库的 People 表中抓取 Cloyd 的 ID,并将该 ID 添加为用户属性user_id: 24992499 是 Beer 先生在示例数据库中的 ID)。

User details

  1. 将 Beer 先生添加到 Customers 群组:请参阅将人员添加到群组

  2. 创建一个仅管理员可见的集合。。将其命名为“Admin collection”。我们将使用此集合来存储 SQL 问题,这些问题用于示例 2 和 3 中的沙箱表。请参阅集合权限

基本沙箱设置 - 基于用户属性筛选行

在本示例中,我们将沙箱化我们的 Orders 表,以便 Customers 群组中的任何人只能看到 Orders 表中 User ID 列与该人员的 user_id 属性匹配的行。

  1. 转到管理设置 > 权限 > 数据。单击“Customers”群组。

  2. 将查看数据设置为精细化。对于示例数据库,将 Customer 群组的查看数据设置为“精细化”。设置为“精细化”将允许我们为 Customer 群组设置各个表的权限。

  3. 沙箱化 Orders 表和 People 表。在这里,我们将 Orders 表和 People 表的查看数据权限设置为“已沙箱化”。由于我们希望人们能够自助服务他们的数据(通过提问、创建仪表板等),我们还将他们的创建查询权限设置为“仅查询构建器”。

Grant sandboxed access

  1. 为每个表按列筛选。 对于每个表,Metabase 将询问我们“您希望如何为此群组中的用户筛选此表?”。在每种情况下,我们都将保留默认选择:“按此表上的列筛选。”对于 Orders 表,我们将按 User ID 列进行筛选,我们将其设置为等于 Customers 群组中人员的 user_id 属性。

Sandbox settings

对于 People 表,我们将按 ID 列进行筛选,我们将其设置为等于相同的 user_id 属性。

  1. 保存您的更改。否则,一切都将徒劳。

测试基本沙箱

为了测试 Beer 先生的沙箱,我们将打开一个新的隐身/私密浏览器窗口,并使用 Beer 先生的账户登录。

  1. 以 Cloyd Beer 身份登录。
  2. 点击浏览 > 数据库
  3. 点击 Orders 表。
  4. 确认 Metabase 仅显示 Beer 先生下的订单,即与用户 ID 2499 关联的订单。

如果 Beer 先生查看任何图表、仪表板,甚至包括沙箱化 Orders 数据的自动化X 射线探索,Metabase 也会筛选这些结果,以仅显示 Beer 先生被允许查看的数据。当 Beer 先生使用查询构建器提出新问题时,他的结果将仅限于沙箱化数据。

自定义沙箱设置

创建沙箱的第二种方法是使用已保存的问题来定义要显示的表的自定义视图。当具有沙箱化表访问权限的人员查询该表时,Metabase 会在后台使用您创建的已保存问题作为他们查询的源数据。

您可以

自定义示例 1:筛选列

在本示例中,我们有一个名为 People 的表,我们希望对其进行修剪,以便 Beer 先生和其他 Customers 可以查看任何行,但只能查看某些列。

Original People table

  1. 创建一个限制 People 表中列的查询。 使用原生/SQL 编辑器,我们将编写一个仅返回表中我们希望我们的 Customers 群组看到的列的查询,如下所示
  ID,
  Name,
  'Created At',
  State
FROM
  People

以下是结果

Filtering question

我们将此问题命名为“筛选后的 People 表”。将其保存到您在设置中创建的“Admins collection”(或仅管理员有权访问的任何集合)。

  1. 使用已保存的问题为此表创建自定义视图:我们将转到权限部分,并授予此群组对此表的沙箱化访问权限。这次我们将选择第二个选项“使用已保存的问题为此表创建自定义视图”,并选择我们刚刚创建的已保存问题(“筛选后的 People 表”),如下所示

Sandbox options

  1. 保存更改,以免我们的辛劳徒劳无功。

  2. 验证一切正常。我们可以以 Beer 先生的身份登录,当我们打开 People 表时,我们应该看到 Beer 先生可以改为查看筛选问题的结果。

当 Beer 先生查看使用来自此沙箱化表的数据的图表时,Metabase 也会应用筛选。如果图表使用沙箱化表排除的任何列,则该图表将不会为 Beer 先生加载。

自定义示例 2:筛选行和列

如果我们想指定人们可以查看哪些列行,我们可以基于带有变量的 SQL 问题沙箱化表,并将该变量与用户属性关联。为此,我们将为我们的 Customers 群组提供 Orders 表的自定义视图,但仅允许每个人根据其 user_id 用户属性查看行。

  1. 创建一个带有变量的 SQL 问题。我们将创建一个查询,该查询仅从 Orders 表中选择某些列,然后添加一个带有变量的 WHERE 子句,我们可以将该变量与 Cloyd Beer 的 user_id 用户属性关联。

Filtering question

这是代码


SELECT
  id,
  created_at,
  product_id,
  quantity,
  total,
  user_id
FROM
  orders
WHERE
  user_id = {{user_id}}

将其保存到您在设置中创建的“Admins collection”(或仅管理员有权访问的任何集合)。

  1. 设置沙箱:返回权限选项卡。选择 Cloyd Beer 的 Customer 群组,并将 Orders 表的查看数据访问权限设置为 已沙箱化。选择使用已保存的问题为此表创建自定义视图。打开沙箱化访问模态,选择第二个选项并选择我的筛选问题,我们将看到一个额外的部分,该部分允许我将我们在问题中定义的变量映射到用户属性

Sandboxing options

  1. 保存您的更改。否则就放弃希望吧。

  2. 验证沙箱:现在,当我们以 Beer 先生身份登录并查看 Orders 表时,Beer 先生将仅看到我们在筛选问题中包含的列,并且行会按照问题 WHERE 子句中的变量指定的方式进行筛选

Results

进一步阅读

阅读其他 Metabase 版本的文档