数据沙盒示例

数据沙盒仅适用于专业版企业版计划(自托管和Metabase云上均适用)。

数据沙盒允许您

以下示例的基本设置

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

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

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

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

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

User details

  1. 将Mr. Beer添加到客户组:请参阅将人员添加到组

  2. 创建一个只有管理员才能查看的集合。命名为“管理员集合”。我们将使用此集合来存储我们在示例2和3中使用来沙盒表的问题。请参阅集合权限

基本沙盒设置 - 根据用户属性过滤行

在本例中,我们将沙盒我们的 Orders 表,以便我们的客户组中的任何人只能看到 User ID 列与个人的 user_id 属性匹配的 Orders 表中的行。

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

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

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

Grant sandboxed access

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

Sandbox settings

对于 People 表,我们将通过 ID 列进行过滤,该列将设置为等于相同的 user_id 属性。

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

测试基本沙盒

要测试Mr. Beer的沙盒,我们将打开一个新的隐身/私密浏览器窗口并使用Mr. Beer的账户登录。

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

如果贝尔先生查看任何图表、仪表板,甚至包括沙盒中的订单数据的自动X射线探索,Metabase也将过滤这些结果,只显示贝尔先生有权看到的数据。当贝尔先生使用查询构建器提出新的问题时,他的结果将仅限于沙盒数据。

自定义沙盒设置

创建沙盒的第二种方法是通过使用已保存的问题来定义一个自定义的表视图以显示。当有人查询具有沙盒访问权限的表时,Metabase会使用您创建的已保存问题作为查询的数据来源。

您可以

自定义示例 1:过滤列

在这个例子中,我们有一个名为People的表,我们希望将其缩减,以便贝尔先生和其他客户可以查看任何行,但只能查看某些列。

Original People table

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

以下是结果

Filtering question

我们将把这个问题称为“过滤后的人员表”。将其保存到您在设置中创建的“管理员收藏夹”(或任何只有管理员可以访问的收藏夹)。

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

Sandbox options

  1. 保存更改,以免白费力气。

  2. 验证一切是否正常工作。我们可以以贝尔先生的身份登录,当我们打开People表时,我们应该看到贝尔先生可以查看过滤查询的结果。

当贝尔先生查看使用此沙盒表数据的图表时,Metabase也将应用过滤。如果图表使用沙盒表中排除的任何列,则图表将不会为贝尔先生加载。

自定义示例 2:过滤行和列

如果我们想指定人们可以查看哪些列和行,我们可以基于带有变量的SQL问题沙盒一个表,并将该变量与用户属性关联起来。为此,我们将给我们的客户组一个自定义的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}}

将其保存到您在设置中创建的“管理员收藏夹”(或任何只有管理员可以访问的收藏夹)。

  1. 设置沙盒:返回到权限选项卡。选择Cloyd Beer的客户组,并将订单表的查看数据访问权限设置为沙盒。选择使用已保存的问题为此表创建自定义视图。打开沙盒访问对话框,选择第二个选项并选择我的筛选问题,我们将看到额外的部分,允许我将我们在问题中定义的变量与用户属性进行映射

Sandboxing options

  1. 保存您的更改。或者放弃所有希望。

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

Results

进一步阅读

阅读Metabase的其他版本的文档。

想要改进这些文档? 提出更改。