数据沙盒

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

数据沙盒允许您为不同人群的行和列设置精细的权限。您可以沙盒化群组可以查看的数据,以及群组可以使用查询构建器可以查询的数据。

您可以使用沙盒来设置自助式分析,以便您的每个客户仅查看与其客户 ID 匹配的行。例如,如果您有一个包含客户信息的“Accounts”表,您可以沙盒化该表,以便每个客户仅看到与其相关的数据。

数据沙盒示例

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

沙盒如何工作

您可以将数据沙盒视为权限的捆绑包,其中包括

  • 表格的过滤版本,它将替换您的原始表格,在 Metabase 中使用原始表格的任何地方。
  • 应该看到表格过滤版本的人员群组

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

数据沙盒的类型

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

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

基本数据沙盒:按表格中的列筛选

限制行,请使用基本沙盒。基本沙盒向群组显示表格的过滤版本,而不是原始表格。过滤器通过将表格中的列设置为特定的用户属性值来工作。

例如,您可以创建一个基本沙盒来为群组过滤“Accounts”表,以便

  • 用户属性值为“Basic”的人员将看到 Plan = "Basic" 的行(Plan 列与值“Basic”匹配的行)。
  • 用户属性值为“Premium”的人员将看到 Plan = "Premium" 的行(Plan 列与值“Premium”匹配的行)。

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

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

例如,假设您的原始“Accounts”表包含以下列:IDEmailPlanCreated At。如果您想隐藏“Email”列,您可以创建一个包含以下列的“沙盒化 Accounts”SQL 问题:IDPlanCreated At

自定义沙盒将向特定群组显示“沙盒化 Accounts”问题结果,而不是原始的“Accounts”表格,在 Metabase 中使用“Accounts”的任何地方。

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

局限性

在沙盒中运行不佳的事项。

具有原生查询权限(访问 SQL 编辑器)的群组无法沙盒化

您无法为沙盒化群组设置查询构建器和原生查询。

要使用原生查询编辑器强制执行行级权限,请查看模拟

SQL 问题无法沙盒化

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

使用集合权限来防止沙盒化群组查看包含受限数据的已保存 SQL 问题。

非 SQL 数据库无法沙盒化

数据沙盒权限不适用于非 SQL 数据库,例如 Apache Druid 或 MongoDB。

基本沙盒的先决条件

基本沙盒向特定群组显示过滤后的表格,而不是原始表格。Metabase 如何过滤该表格取决于每个人用户属性中的值。

例如,您可以设置一个基本沙盒,以便

  • 具有键为“plan”且值为“Basic”的用户属性的人员将看到“Accounts”表格的一个版本,其中包含 Plan = "Basic" 的过滤器(即,仅 Plan 列与值“Basic”匹配的行)。
  • 具有设置为“Premium”的“plan”用户属性的人员将看到“Accounts”表格的不同版本,其中应用了过滤器 Plan = "Premium"

为数据沙盒选择用户属性

用户属性是基本沙盒的必需项,对于自定义沙盒是可选的。当添加新的用户属性时,您将为每个人设置键值对。

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

用户属性值必须与沙盒化表格的过滤器值完全匹配(区分大小写)。例如,如果您正在“Accounts”表格上创建基本沙盒,并使用过滤器 Plan = "Basic",请确保您输入“Basic”作为用户属性值。如果您将用户属性值设置为小写“basic”(“Accounts”表格的“Plan”列中不存在的值),则沙盒化人员将获得空结果,而不是沙盒化表格。

用户属性在应用中的示例

创建基本沙盒

  1. 确保首先完成基本沙盒的先决条件
  2. 转到管理设置 > 权限
  3. 选择您要沙盒化的数据库和表格。
  4. 找到您要放入沙盒的群组。
  5. 单击该群组的“查看数据”下的下拉菜单。
  6. 选择“沙盒化”。
  7. 单击“列”下的下拉菜单,然后输入要筛选表格的列,例如“Plan”。
  8. 单击“用户属性”下的下拉菜单,然后输入用户属性,例如“Plan”。

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

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

自定义沙盒的先决条件

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

创建 SQL 问题以供 Metabase 在自定义沙盒中显示

在高级数据沙盒中,Metabase 将向特定群组显示已保存的问题,而不是原始表格。

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

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

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

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

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

如果您编辑列,则已保存 SQL 查询(您想要在沙盒中显示的查询)的模式必须与原始表的模式匹配。这意味着“沙盒账户” SQL 查询必须返回与原始 Accounts 表相同数量的列和相应的数据类型。

您无法向自定义沙盒添加列。

创建自定义沙盒

  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 查询中参数的名称(例如 “Plan Variable”)。
  10. 用户属性设置为用户属性键(例如键 “User’s Plan”,不是值 “Basic”)。
  11. 单击保存

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

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

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

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

WHERE column_name = column_value

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

WHERE plan = {{ plan_variable }}

在上面行限制设置的步骤 9-10 中,您正在告诉 Metabase 将 SQL 变量 plan_variable 映射到用户属性键(例如 “User’s Plan”)。Metabase 将使用该键查找与个人的 Metabase 帐户关联的特定用户属性值(例如 “Basic”)。当该人登录 Metabase 并使用沙盒表时,他们将看到根据以下条件过滤的查询结果

WHERE plan = "Basic"

请注意,对于用于创建自定义沙盒的 SQL 查询,参数必须是必需的。例如,您不能使用可选参数;以下方法将不起作用

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

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

防止数据沙盒权限冲突

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

假设您有一个自定义沙盒,它从 Accounts 表中隐藏了“邮箱”列(对于特定组)。

如果出现以下情况,则“邮箱”列可能会暴露给沙盒人员

多个数据沙盒权限

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

例如,如果您有

  • 一个用于 “Basic Accounts” 组的沙盒,该沙盒根据 Plan = "Basic" 过滤 Accounts 表。
  • 另一个用于 “Converted Accounts” 组的沙盒,该沙盒根据 Trial Converted = true 过滤 Accounts 表。

如果您将 Vincent Accountman 放入这两个组,他将处于 Accounts 表的冲突沙盒中,并且每当他尝试在 Metabase 中使用 Accounts 时都会收到错误消息。

要解决数据沙盒权限冲突

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

已保存的 SQL 查询无法沙盒化

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

假设您有一个自定义沙盒,它从 Accounts 表中隐藏了“邮箱”列。如果非沙盒人员创建了一个包含“邮箱”列的 SQL 查询,则任何具有查看该 SQL 查询的集合权限的人员都将能够

  • 在 SQL 查询结果中查看“邮箱”列。
  • 使用 SQL 查询启动包含“邮箱”列的新问题。

为了防止通过 SQL 查询暴露“邮箱”列

  • 将任何包含“邮箱”列的 SQL 查询放在单独的集合中。
  • 将应该看不到“邮箱”列的沙盒组的集合权限设置为无访问权限

必须使用集合权限来防止沙盒组查看引用沙盒表的已保存 SQL 查询。这就是为什么在您创建自定义沙盒时,您必须将已保存的 SQL 查询(您想要在沙盒中显示的查询)放在仅限管理员的集合中。

公开分享

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

为了防止这种情况发生,您必须禁用您 Metabase 实例的公开分享

Metabase 只能使用已登录人员的组成员身份或用户属性创建数据沙盒。由于公共链接不需要登录,因此 Metabase 将没有足够的信息来创建沙盒。

延伸阅读

阅读其他Metabase 版本的文档。