数据沙盒
数据沙盒允许您为不同用户组提供行和列的细粒度权限。您可以沙盒化一个组可以查看的数据,以及一个组可以使用查询构建器查询的数据。
您可以使用沙盒设置自助式分析,这样每个客户只能查看与他们客户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列中不存在的值),沙盒中的个人将获得空结果,而不是沙盒表。
用户属性实例
创建基本沙盒
- 请先完成基本沙盒的先决条件。
- 转到 管理员设置 > 权限。
- 选择要沙盒化的数据库和表。
- 找到要放入沙盒中的组。
- 单击该组下方的 查看数据 下拉菜单。
- 选择“沙盒化”。
- 单击 列 下方的下拉菜单,并输入用于过滤表的列,例如“Plan”。
- 单击 用户属性 下方的下拉菜单,并输入用户属性 键,例如“Plan”。
如果您已保存使用沙盒数据的SQL查询,请确保将这些查询全部移动到仅管理员可访问的集合中。有关更多信息,请参阅权限冲突:已保存的SQL查询。
您可以在数据沙盒示例中找到一个基本沙盒设置的示例。
自定义沙盒的先决条件
- 要添加到高级数据沙盒的人员组。
- 一个仅管理员可访问的集合,将集合权限设置为除了管理员以外的所有组均无访问权限。
- 一个包含要在自定义沙盒中显示的行和列的已保存的SQL查询,存储在仅管理员可访问的集合中。
- 可选:如果您想限制自定义沙盒中的行,为组中的每个人设置用户属性。
为Metabase创建SQL查询以在自定义沙盒中显示
在高级数据沙盒中,Metabase将用已保存的问题替换原始表向特定组显示。
使用SQL查询定义要包含在沙盒中的确切行和列。如果您使用查询构建器(GUI)问题,可能会无意中暴露额外数据,因为GUI问题可能包括来自其他已保存问题或模型的数据。
请确保将SQL查询保存在仅管理员可访问的集合中(集合权限设置为除管理员以外的所有组均无访问权限)。有关更多信息,请参阅权限冲突:已保存的SQL查询。
在自定义沙盒中显示编辑后的列
除了从自定义沙盒中排除行和列之外,您还可以显示编辑后的列(而不更改数据库中的列)。
例如,您可以创建一个“沙盒化账户”SQL查询,截断Email列以显示用户名而不是完整的电子邮件地址。
如果您编辑一列,保存的SQL查询的架构(您要在沙盒中显示的问题)必须与原始表的架构匹配。这意味着“沙盒账户”SQL查询必须返回与原始账户表相同的列数和对应的数据类型。
您不能向自定义沙盒中添加列。
创建自定义沙盒
- 请先完成自定义沙盒的先决条件。
- 转到 管理员设置 > 权限。
- 选择要沙盒化的数据库和表。
- 找到要放入沙盒中的组。
- 点击该组下方的下拉菜单中的数据访问。
- 选择“沙盒化”。
- 选择“使用保存的问题为此表创建自定义视图”。
- 选择您的保存问题。问题应以SQL编写。如果问题包含参数,则这些参数必须是必需的(不能是可选的)。
- 可选:根据用户的用户属性限制行。
如果您已保存使用沙盒数据的SQL问题,请确保将这些问题全部移动到仅管理员可见的集合中。
您可以在数据沙盒示例中找到自定义沙盒设置的示例。
使用用户属性限制自定义沙盒中的行
您可以为自定义沙盒设置不同的行限制,具体取决于每个人的用户属性。例如,您可以为一个组显示带有过滤器 Plan = "Basic"
的“沙盒账户”问题,并为另一个组显示过滤器 Plan = "Premium"
的问题。
- 请确保您已完成所有自定义沙盒的先决条件。
- 转到将显示给自定义沙盒中人员的保存SQL问题。
- 为您的SQL查询添加一个参数化的
WHERE
子句,例如WHERE plan = {{ plan_variable }}
。 - 保存SQL问题。
- 转到 管理员设置 > 权限。
- 找到您的自定义沙盒的组和表。
- 在查看数据下方打开下拉菜单。
- 点击编辑沙盒访问权限。
- 向下滚动并将参数或变量设置为保存SQL问题中参数的名称(例如“计划变量”)。
- 将用户属性设置为用户属性键(例如键“用户计划”,不是值“基本”)。
- 点击保存。
有关示例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版本的文档。