数据沙盒
数据沙盒仅在 Pro 和 Enterprise 计划(自托管和 Metabase Cloud)中可用。
数据沙盒允许您为不同人群的行和列设置精细的权限。您可以沙盒化群组可以查看的数据,以及群组可以使用查询构建器可以查询的数据。
您可以使用沙盒来设置自助式分析,以便您的每个客户仅查看与其客户 ID 匹配的行。例如,如果您有一个包含客户信息的“Accounts”表,您可以沙盒化该表,以便每个客户仅看到与其相关的数据。
数据沙盒示例
您可以跳过理论,直接查看沙盒示例。
沙盒如何工作
您可以将数据沙盒视为权限的捆绑包,其中包括
- 表格的过滤版本,它将替换您的原始表格,在 Metabase 中使用原始表格的任何地方。
- 应该看到表格过滤版本的人员群组。
您可以在 Metabase 中为每个表/群组组合定义最多一个数据沙盒。这意味着您可以为不同的群组显示不同版本的表格,例如向您的销售人员显示“销售人员的沙盒化 Accounts”,向销售经理显示“经理的沙盒化 Accounts”。
数据沙盒的类型
数据沙盒根据每个人的用户属性显示特定的数据。您可以
基本沙盒(按表格中的列筛选) | 自定义沙盒(使用已保存的 SQL 问题) | |
---|---|---|
通过在单列上筛选来限制行 | ✅ | ✅ |
通过在多列上筛选来限制行 | ❌ | ✅ |
限制列 | ❌ | ✅ |
编辑列 | ❌ | ✅ |
基本数据沙盒:按表格中的列筛选
要限制行,请使用基本沙盒。基本沙盒向群组显示表格的过滤版本,而不是原始表格。过滤器通过将表格中的列设置为特定的用户属性值来工作。
例如,您可以创建一个基本沙盒来为群组过滤“Accounts”表,以便
- 用户属性值为“Basic”的人员将看到
Plan = "Basic"
的行(Plan 列与值“Basic”匹配的行)。 - 用户属性值为“Premium”的人员将看到
Plan = "Premium"
的行(Plan 列与值“Premium”匹配的行)。
自定义数据沙盒:使用已保存的问题创建表格的自定义视图
要限制列以及行,请使用自定义沙盒(也称为高级沙盒)。自定义沙盒显示已保存的 SQL 问题的结果,而不是您的原始表格。
例如,假设您的原始“Accounts”表包含以下列:ID
、Email
、Plan
和 Created At
。如果您想隐藏“Email”列,您可以创建一个包含以下列的“沙盒化 Accounts”SQL 问题:ID
、Plan
和 Created 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”列中不存在的值),则沙盒化人员将获得空结果,而不是沙盒化表格。
用户属性在应用中的示例
创建基本沙盒
- 确保首先完成基本沙盒的先决条件。
- 转到管理设置 > 权限。
- 选择您要沙盒化的数据库和表格。
- 找到您要放入沙盒的群组。
- 单击该群组的“查看数据”下的下拉菜单。
- 选择“沙盒化”。
- 单击“列”下的下拉菜单,然后输入要筛选表格的列,例如“Plan”。
- 单击“用户属性”下的下拉菜单,然后输入用户属性键,例如“Plan”。
如果您有使用沙盒化数据的已保存 SQL 问题,请确保将所有这些问题移动到仅限管理员的集合。有关更多信息,请参阅权限冲突:已保存的 SQL 问题。
您可以在数据沙盒示例中找到基本沙盒设置的示例。
自定义沙盒的先决条件
- 要添加到高级数据沙盒的人员群组。
- 仅限管理员的集合,集合权限设置为无访问权限,除了管理员群组外。
- 已保存的 SQL 问题,其中包含要向自定义沙盒中的人员显示的行和列,存储在仅限管理员的集合中。
- 可选:如果您想在自定义沙盒中限制行,请为群组中的每个人设置用户属性。
创建 SQL 问题以供 Metabase 在自定义沙盒中显示
在高级数据沙盒中,Metabase 将向特定群组显示已保存的问题,而不是原始表格。
使用 SQL 问题来定义要包含在沙盒中的确切行和列。如果您使用查询构建器 (GUI) 问题,您可能会意外地暴露额外数据,因为 GUI 问题可能包含来自其他已保存问题或模型的数据。
确保将 SQL 问题保存在仅限管理员的集合中(集合权限设置为无访问权限,除了管理员群组外)。有关更多信息,请参阅权限冲突:已保存的 SQL 问题。
在自定义沙盒中显示编辑过的列
除了从自定义沙盒中排除行和列之外,您还可以显示编辑过的列(而无需更改数据库中的列)。
例如,您可以创建一个 “沙盒账户” SQL 查询,该查询会截断“邮箱”列,以显示用户名而不是完整的电子邮件地址。
如果您编辑列,则已保存 SQL 查询(您想要在沙盒中显示的查询)的模式必须与原始表的模式匹配。这意味着“沙盒账户” SQL 查询必须返回与原始 Accounts 表相同数量的列和相应的数据类型。
您无法向自定义沙盒添加列。
创建自定义沙盒
- 请务必先完成自定义沙盒的先决条件。
- 转到管理设置 > 权限。
- 选择您要沙盒化的数据库和表格。
- 找到您要放入沙盒的群组。
- 单击该组下数据访问下的下拉菜单。
- 选择“沙盒化”。
- 选择“使用已保存的查询为此表创建自定义视图”。
- 选择您已保存的查询。该查询应以 SQL 编写。如果查询包含参数,则这些参数必须是必需的(不能是可选的)。
- 可选:根据用户的用户属性限制行。
如果您有已保存的使用沙盒数据的 SQL 查询,请务必将所有这些查询移动到仅限管理员的集合中。
您可以在数据沙盒示例中找到示例自定义沙盒设置。
使用用户属性限制自定义沙盒中的行
您可以设置自定义沙盒,以便根据每个人的用户属性为每个人限制不同的行。例如,您可以为一组显示带有过滤器 Plan = "Basic"
的 “沙盒账户” 查询,为另一组显示带有过滤器 Plan = "Premium"
的查询。
- 请确保您已完成所有自定义沙盒的先决条件。
- 转到将向自定义沙盒中的人员显示的已保存 SQL 查询。
- 向您的 SQL 查询添加一个参数化
WHERE
子句,例如WHERE plan = {{ plan_variable }}
。 - 保存 SQL 查询。
- 转到管理设置 > 权限。
- 找到您的自定义沙盒的组和表。
- 打开查看数据下的下拉菜单。
- 单击编辑沙盒访问权限。
- 向下滚动并将参数或变量设置为已保存 SQL 查询中参数的名称(例如 “Plan Variable”)。
- 将用户属性设置为用户属性键(例如键 “User’s Plan”,不是值 “Basic”)。
- 单击保存。
有关示例 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 版本的文档。