数据沙盒示例

数据沙盒仅适用于 Pro 版企业版 计划(包括自托管和 Metabase 云版本)。

数据沙盒让您能够

以下所有示例的设置

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

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

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

  3. 为 Cloyd Beer 创建一个用户帐户。我们将为示例数据库中“人员”表中的一个随机人员创建一个用户帐户。我们选择示例数据库“人员”表中的 Cloyd Beer

  4. 为帐户添加用户属性:我们将为 Cloyd 的帐户添加一个用户属性。由于我们希望能够按用户 ID 筛选数据,因此我们将从示例数据库的 人员 表中获取 Cloyd 的 ID,并将其添加为用户属性user_id: 24992499 是 Beer 先生在示例数据库中的 ID)。

User details

  1. 将 Beer 先生添加到“客户”组:请参阅将人员添加到组

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

基本沙盒设置 - 根据用户属性筛选行

在此示例中,我们将对 订单 表进行沙盒化,以便“客户”组中的任何人只能看到“订单”表中“用户 ID”列与该人员的 user_id 属性匹配的行。

  1. 转到“管理设置”>“权限”>“数据”。点击“客户”组。

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

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

Grant sandboxed access

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

Sandbox settings

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

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

测试基本沙盒

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

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

如果 Beer 先生查看包含沙盒化 订单 数据的任何图表、仪表板,甚至自动 X 光分析探索,Metabase 也会筛选这些结果,以仅显示 Beer 先生有权查看的数据。当 Beer 先生使用查询构建器提出新问题时,他的结果将仅限于沙盒化数据。

自定义沙盒设置

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

您可以

自定义示例 1:筛选列

在此示例中,我们有一个名为 人员 的表,我们希望将其精简,以便 Beer 先生和其他客户可以查看任何行,但只能查看部分列。

Original People table

  1. 创建限制“人员”表中列的查询。使用原生/SQL 编辑器,我们将编写一个查询,只返回我们希望“客户”组看到的那些列,如下所示:
  ID,
  Name,
  'Created At',
  State
FROM
  People

以下是结果:

Filtering question

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

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

Sandbox options

  1. 保存更改,以免劳而无功。

  2. 验证是否正常工作。我们可以以 Beer 先生的身份登录,当我们打开 人员 表时,应该看到 Beer 先生能够看到筛选问题的结果。

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

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

如果我们想指定用户可以查看哪些列和行,我们可以根据带有变量的 SQL 问题来沙盒化一个表,并将该变量与用户属性关联起来。为此,我们将为“客户”组提供 订单 表的自定义视图,但只允许每个人根据其 user_id 用户属性查看行。

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

Filtering question

以下是代码:


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

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

  1. 设置沙盒:返回“权限”选项卡。选择 Cloyd Beer 的“客户”组,并将 订单 表的查看数据访问权限设置为沙盒化。选择“使用已保存的问题为该表创建自定义视图”。打开沙盒访问模式并选择第二个选项并选择我的筛选问题,我们将看到一个附加部分,允许我将问题中定义的变量与用户属性映射起来

Sandboxing options

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

  2. 验证沙盒:现在,当我们以 Beer 先生的身份登录并查看 订单 表时,Beer 先生将只看到我们包含在筛选问题中的列,并且行将根据问题中 WHERE 子句中的变量进行筛选

Results

延伸阅读

阅读其他版本 Metabase 的文档。

© . All rights reserved.