数据沙盒

数据沙盒仅可在Pro企业计划中使用(包括自托管和Metabase Cloud上的计划)。

数据沙盒允许您为不同用户组提供行和列的细粒度权限。您可以沙盒化一个组可以查看的数据,以及一个组可以使用查询构建器查询的数据。

您可以使用沙盒设置自助式分析,这样每个客户只能查看与他们客户ID匹配的行。例如,如果您有一个包含客户信息的账户表,您可以沙盒化该表,以便每个客户只能看到与他们相关的数据。

数据沙盒示例

您可以跳过理论,直接查看沙盒示例

沙盒如何工作

您可以将数据沙盒视为一组权限,包括

  • 将替换原始表的筛选版表格,在Metabase中原始表使用的任何地方。
  • 应该看到表格筛选版的用户组

您可以在Metabase中的每个表格/组组合中定义最多一个数据沙盒。这意味着您可以为不同的组显示表格的不同版本,例如,为销售人员显示“销售沙盒化的账户”,为销售经理显示“管理沙盒化的账户”。

数据沙盒的类型

数据沙盒根据用户的用户属性向每个人展示特定的数据。您可以

  • 使用基本沙盒对特定人员进行限制。
  • 使用自定义沙盒(也称为高级沙盒)对特定人员进行列(以及行)限制。
  基本沙盒(通过表格中的列进行筛选) 自定义沙盒(使用保存的SQL问题)
通过筛选单个列限制行
通过筛选多个列限制行
限制列
编辑列

基本数据沙盒:通过表格中的列进行筛选

限制行,请使用基本沙盒。基本沙盒显示表格的筛选版,而不是原始表格给一个组。筛选通过设置表格中的一列到特定的用户属性值来实现。

例如,您可以为某个组创建一个基本沙盒来筛选账户表,使

  • 具有用户属性值“基本”的人员将看到Plan = "Basic"(与“基本”值匹配的计划列的行)。
  • 具有用户属性值“高级”的人员将看到Plan = "Premium"(与“高级”值匹配的计划列的行)。

自定义数据沙盒:使用保存的问题创建表格的定制视图

要同时限制行和列,请使用自定义沙盒(也称为高级沙盒)。自定义沙盒显示保存的SQL问题的结果,而不是您的原始表格。

例如,假设您的原始“账户”表包含以下列:ID邮箱计划创建时间。如果您想隐藏“邮箱”列,可以创建一个包含以下列的“沙箱账户”SQL问题:ID计划创建时间

自定义沙箱将显示“沙箱账户”问题结果,而不是原始的“账户”表,在Metabase中“账户”被使用的所有地方,针对特定的组。

您还可以使用自定义沙箱来

限制

沙箱中表现不佳的事物。

具有原生查询权限(访问SQL编辑器)的组不能沙箱化

您无法为沙箱组设置查询构建器和原生

要使用原生查询编辑器执行行级权限,请参阅伪装

SQL问题不能沙箱化

由于Metabase无法解析SQL查询,SQL问题的结果将始终使用原始表,而不是沙箱表。

使用集合权限来防止沙箱化组查看具有受限数据的已保存SQL问题。

非SQL数据库不能沙箱化

对于Apache Druid或MongoDB等非SQL数据库,数据沙箱权限不可用。

基本沙箱的先决条件

基本沙箱显示一个过滤表,代替原始表,针对特定组显示。Metabase如何过滤该表取决于每个人用户属性中的值。

例如,您可以设置基本沙箱,以便

  • 具有“计划”用户属性键和“基本”值的用户将看到具有Plan = "Basic"(即,仅与“计划”列匹配“基本”值的行)过滤的账户表版本。
  • 具有将“计划”用户属性设置为“高级”的用户将看到应用了Plan = "Premium"过滤的不同版本的账户表。

选择数据沙箱的用户属性

基本沙箱需要用户属性,而自定义沙箱是可选的。在添加新用户属性时,您将为每个人设置一个键值对。

Metabase使用用户属性键来查找特定人员的用户属性值。用户属性键可以映射到Metabase中的参数。

用户属性值必须与沙盒表过滤值的精确匹配,区分大小写。例如,如果您在“账户”表上创建了一个带有过滤条件 Plan = "Basic" 的基本沙盒,请确保将“Basic”作为用户属性值输入。如果您将用户属性值设置为小写“basic”(一个在账户表的Plan列中不存在的值),沙盒中的个人将获得空结果,而不是沙盒表。

用户属性实例

创建基本沙盒

  1. 请先完成基本沙盒的先决条件
  2. 转到 管理员设置 > 权限
  3. 选择要沙盒化的数据库和表。
  4. 找到要放入沙盒中的组。
  5. 单击该组下方的 查看数据 下拉菜单。
  6. 选择“沙盒化”。
  7. 单击 下方的下拉菜单,并输入用于过滤表的列,例如“Plan”。
  8. 单击 用户属性 下方的下拉菜单,并输入用户属性 ,例如“Plan”。

如果您已保存使用沙盒数据的SQL查询,请确保将这些查询全部移动到仅管理员可访问的集合中。有关更多信息,请参阅权限冲突:已保存的SQL查询

您可以在数据沙盒示例中找到一个基本沙盒设置的示例。

自定义沙盒的先决条件

  • 要添加到高级数据沙盒的人员组
  • 一个仅管理员可访问的集合,将集合权限设置为除了管理员以外的所有组均无访问权限。
  • 一个包含要在自定义沙盒中显示的行和列的已保存的SQL查询,存储在仅管理员可访问的集合中。
  • 可选:如果您想限制自定义沙盒中的,为组中的每个人设置用户属性

为Metabase创建SQL查询以在自定义沙盒中显示

在高级数据沙盒中,Metabase将用已保存的问题替换原始表向特定组显示。

使用SQL查询定义要包含在沙盒中的确切行和列。如果您使用查询构建器(GUI)问题,可能会无意中暴露额外数据,因为GUI问题可能包括来自其他已保存问题或模型的数据。

请确保将SQL查询保存在仅管理员可访问的集合中(集合权限设置为除管理员以外的所有组均无访问权限)。有关更多信息,请参阅权限冲突:已保存的SQL查询

在自定义沙盒中显示编辑后的列

除了从自定义沙盒中排除行和列之外,您还可以显示编辑后的列(而不更改数据库中的列)。

例如,您可以创建一个“沙盒化账户”SQL查询,截断Email列以显示用户名而不是完整的电子邮件地址。

如果您编辑一列,保存的SQL查询的架构(您要在沙盒中显示的问题)必须与原始表的架构匹配。这意味着“沙盒账户”SQL查询必须返回与原始账户表相同的列数和对应的数据类型。

您不能向自定义沙盒中添加列。

创建自定义沙盒

  1. 请先完成自定义沙盒的先决条件
  2. 转到 管理员设置 > 权限
  3. 选择要沙盒化的数据库和表。
  4. 找到要放入沙盒中的组。
  5. 点击该组下方的下拉菜单中的数据访问
  6. 选择“沙盒化”。
  7. 选择“使用保存的问题为此表创建自定义视图”。
  8. 选择您的保存问题。问题应以SQL编写。如果问题包含参数,则这些参数必须是必需的(不能是可选的)。
  9. 可选:根据用户的用户属性限制行

如果您已保存使用沙盒数据的SQL问题,请确保将这些问题全部移动到仅管理员可见的集合中。

您可以在数据沙盒示例中找到自定义沙盒设置的示例。

使用用户属性限制自定义沙盒中的行

您可以为自定义沙盒设置不同的行限制,具体取决于每个人的用户属性。例如,您可以为一个组显示带有过滤器 Plan = "Basic" 的“沙盒账户”问题,并为另一个组显示过滤器 Plan = "Premium" 的问题。

  1. 请确保您已完成所有自定义沙盒的先决条件
  2. 转到将显示给自定义沙盒中人员的保存SQL问题。
  3. 为您的SQL查询添加一个参数化WHERE子句,例如 WHERE plan = {{ plan_variable }}
  4. 保存SQL问题。
  5. 转到 管理员设置 > 权限
  6. 找到您的自定义沙盒的组和表。
  7. 查看数据下方打开下拉菜单。
  8. 点击编辑沙盒访问权限
  9. 向下滚动并将参数或变量设置为保存SQL问题中参数的名称(例如“计划变量”)。
  10. 用户属性设置为用户属性键(例如键“用户计划”,不是值“基本”)。
  11. 点击保存

有关示例SQL变量和用户属性设置的示例,请参阅数据沙盒示例

自定义沙盒中行限制的工作原理

用户属性、SQL参数和自定义沙盒如何协同工作以向不同的人显示不同的行。

标准的WHERE子句通过设置列为一个固定值来过滤表

WHERE column_name = column_value

在上面的行限制设置步骤2中,您将添加一个SQL变量,以便WHERE子句可以接受动态值。SQL变量类型必须是文本、数字或日期。

WHERE plan = {{ plan_variable }}

在上面的步骤 9-10 的行限制设置中,您正在告诉 Metabase 将 SQL 变量 plan_variable 映射到一个 用户属性键(例如“用户的计划”)。Metabase 将使用该键查找与某个人的 Metabase 账户关联的特定 用户属性值(例如“基本”)。当那个人登录 Metabase 并使用沙盒表时,他们将看到根据

WHERE plan = "Basic"

请注意,必须为用于创建自定义沙盒的 SQL 问题设置参数。例如,您不能使用可选参数;以下将无法正常工作

[[WHERE plan = {{ plan_variable }}]]

了解更多关于 SQL 参数 的信息

防止数据沙盒权限冲突

一些 Metabase 权限可能与数据沙盒冲突,给您提供比预期更宽松或更严格的访问权限。

比如说您有一个自定义沙盒,它会从“账户”表中隐藏电子邮件列(针对特定组)。

如果以下情况发生,电子邮件列可能会暴露给沙盒中的个人:

多个数据沙盒权限

同一表上的多个数据沙盒可能会创建权限冲突。您可以将个人添加到每个表的最多一个数据沙盒中(通过个人的组)。

例如,如果您有

  • 一个针对“基本账户”组的沙盒,它根据 Plan = "Basic" 过滤“账户”表。
  • 另一个针对“转换账户”组的沙盒,它根据 Trial Converted = true 过滤“账户”表。

如果您将 Vincent Accountman 添加到这两个组,他将在“账户”表中有冲突的沙盒,并且每次他尝试在 Metabase 中使用“账户”时都会收到错误消息。

要解决数据沙盒权限冲突

  • 从除了一个组以外的所有组中删除该个人。
  • 将除了一个组以外的所有组的 查看数据 访问权限设置为数据库的“阻止”。

已保存的 SQL 问题不能沙盒化

数据沙盒权限不适用于 SQL 问题的结果。也就是说,已保存的 SQL 问题将始终显示原始表的结果,而不是沙盒表的结果。

比如说您有一个自定义沙盒,它会从“账户”表中隐藏电子邮件列。如果非沙盒中的个人创建了一个包含电子邮件列的 SQL 问题,任何具有查看该 SQL 问题集合权限的人都将能够

  • 在 SQL 问题结果中看到电子邮件列。
  • 使用 SQL 问题开始一个包含电子邮件列的新问题。

要防止通过 SQL 问题暴露电子邮件列

  • 将包含电子邮件列的所有 SQL 问题放在一个单独的集合中。
  • 将沙盒组应看不到电子邮件列的 集合权限 设置为“无访问权限”。

集合权限 必须用于防止沙盒组查看引用沙盒表的已保存 SQL 问题。这就是为什么,当您创建一个自定义沙盒时,您必须将保存的 SQL 问题(您想在沙盒中显示的问题)放入仅管理员可以访问的集合中。

公开共享

数据沙箱权限不适用于公开问题或公开仪表板。如果非沙箱用户使用原始表创建公开链接,原始表将显示给任何拥有公开链接URL的人。

为了防止这种情况发生,您需要为您的Metabase实例禁用公开共享

Metabase只能使用登录人员的群组成员或用户属性创建数据沙箱。由于公开链接不需要登录,Metabase没有足够的信息来创建沙箱。

进一步阅读

阅读其他Metabase版本的文档。

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