解决沙箱访问行和列的问题

数据沙箱允许一些人只能访问数据的子集。(这个术语来源于将孩子放入沙坑安全玩耍的做法。)为了实现数据沙箱,Metabase运行一个查询来根据用户的权限过滤行和/或从表中选择列的子集;然后,用户的查询在初始查询的结果上运行(即,它在沙箱数据上运行)。

以下文章将帮助您了解数据沙箱是如何工作的

如果您有其他数据访问问题,请参阅相关问题

人们看不到他们应该能看到的表中的

沙箱是根据用户属性过滤行吗?

根本原因:沙箱正在使用用户属性来过滤行。

采取的步骤

这是预期行为:使用用户属性来过滤沙箱表的行是沙箱的工作方式。但如果您希望Metabase过滤这些行,您需要做的是

  • 移除沙箱(这将授予访问该表的每个人对所有行的完全访问权限)。转到管理员 > 权限,并更改表的访问级别。
  • 将此人添加到具有对表不同权限的组中(或创建一个组)。查看数据权限指南

人们可以看到他们不应该看到的

人们可能看到不应该看到的行有几个原因。

这些人是否也属于具有查看整个表权限的组?

根本原因:人们属于具有查看表权限的组,因此可以查看所有行,而不仅仅是沙箱行。

采取的步骤

针对相关人员进行检查,以查看他们属于哪些组。是否有任何组可以访问您尝试沙箱的表?如果是这样,请从该组中删除他们。请记住,每个人都是“所有用户”组的成员;这就是为什么我们建议您从所有用户组撤销权限,并创建新的组来选择性地应用权限到您的数据源。

问题是否通过静态嵌入或公开分享提供?

根本原因:问题是公开的。公开问题,即使使用静态嵌入,也不能沙箱化。如果某人未登录Metabase就查看问题,Metabase缺少用于过滤数据的用户属性或组信息,因此会显示所有结果。

采取的步骤:

您应该在沙箱数据时避免公开分享。请参阅公开分享

问题是用SQL编写的吗?

根本原因。具有数据库SQL访问权限的人不能沙箱化。他们对该数据库的访问权限与用于将Metabase连接到数据库的用户账户相同。即使您在Metabase中隐藏表,具有数据库SQL访问权限的人仍然能够查询这些表。这也意味着SQL问题不能沙箱化。沙箱仅适用于在查询构建器中编写的查询(尽管您可以使用SQL问题创建沙箱,例如,创建一个不包括某些列的表的查询结果集)。

采取的步骤

  • 不要尝试沙箱化用SQL编写的查询,因为您不能。

  • 如果您想要沙箱化访问,请避免将此人与具有对该表SQL访问权限的组(或任何其他更宽松的访问权限)添加。

  • 如果您想给他们提供SQL访问权限,但又要限制他们能看到的内容,您需要在数据库中设置权限,并通过具有受限访问权限的用户账户连接该数据库。您可以多次将同一数据库连接到Metabase,每次都有不同的访问级别,并将不同的连接暴露给不同的组。但再次强调,您无法对具有SQL访问权限的人的数据进行沙盒化。

问题是否是检索非SQL数据源的数据?

根本原因:数据沙盒不支持非SQL数据库。

采取的步骤

这里您能做的并不多:如果您需要沙盒化数据,您不能使用这些数据库

如果您使用单一登录(SSO),用户属性是否正确?

根本原因:如果人们使用SSO登录,但预期的属性没有保存并可供使用,沙盒化将拒绝访问。

采取的步骤:

我们关于使用SAML进行身份验证使用JWT进行身份验证的文档解释了如何使用您的身份提供者将用户属性传递给Metabase,这些(用户属性)可以用于沙盒化数据。

人们可以看到他们不应该看到的

管理员忘记设置沙盒了吗?

根本原因:在设置沙盒化时,管理员没有限制对基础表的访问。

采取的步骤:

  1. 进入管理员面板 > 对问题表进行权限设置。
  2. 检查沙盒是否存在,以及用于沙盒化表的查询是否排除了您不希望人们看到的列。

用于设置沙盒的查询是否包括这些列?

根本原因:创建沙盒的查询包括他们不应该看到的列。

采取的步骤:

请确保您使用SQL查询创建沙盒,并且没有包含应该排除的列。

如果您使用查询构建器(即使用简单或自定义查询)构建问题,可能会无意中包含额外的列。您可以通过在笔记本编辑器中查看问题并单击查看SQL按钮来确切了解包含哪些列。但再次强调:如果您使用SQL查询沙盒化数据,这个问题就会消失。

这个人是否属于另一个具有不同表权限级别的组?

根本原因:您已使用查询沙盒化表,但此人也属于具有更高访问级别的组。如果一个人属于多个组,他们将获得所有组中数据源的最宽松访问权限。

采取的步骤:

从所有具有更高沙盒化表访问权限的组中删除此人。如果他们需要从这些其他组中获得一些权限,您需要创建一个新组,该组只具有对问题表的沙盒化访问权限。

人们看不到他们应该看到的

他们是否只有对表的沙盒化访问权限?

根本原因:他们只有对表的沙盒化版本(只显示一些列)的访问权限。

采取的步骤:

将这些人员添加到具有查看表权限的组(或创建新组)。

管理员是否在表中隐藏了字段?

根本原因:管理员在表中隐藏了字段。

采取的步骤

转到管理员 > 表元数据,找到表。检查您想要显示的字段是否未被隐藏。

是否将字段重新映射以显示受限制表的信息?

根本原因:如果一个人有沙盒访问权限的表中有一个字段使用重映射来显示他们没有沙盒访问权限的其他表中的信息,他们将无法看到该表。例如,如果您已将ID字段重映射以显示产品名称,但该人员没有访问产品表的权限,他们将无法看到该列。

采取的步骤

  1. 前往 管理面板 > 表元数据 查看相关字段。
  2. 如果值是从受限表重映射的,请将其更改为Metabase使用表中的原始值。有关更多信息,请参阅 元数据编辑

问题是否可以通过静态嵌入访问?

根本原因静态嵌入默认显示所有结果。虽然可以使用锁定参数来控制过滤,但静态嵌入仅依赖于包含页面生成的令牌,而不依赖于是否有人登录Metabase。

采取的步骤:

由于必须登录才能使Metabase对该人应用沙盒视图,因此当您想限制对表的行或列访问时,请避免使用静态嵌入。

人们看不到他们应该能看到的数据

有人应该在他们的查询中查看表中的某些值,但被拒绝访问或得到一个空结果集,而应该有数据。

根本原因:管理员限制了对该表的访问。管理员通常将限制访问作为沙盒的一部分;如果错误地设置了限制太严格(例如,“无访问权限”),则人们可能根本无法看到任何数据。

采取的步骤

  1. 通过前往 管理面板 并查看该表的 权限 来检查组访问级别。
  2. 如果该人员不属于具有该表访问权限的组,请将其添加到具有该表访问权限的组中,或创建一个新的具有该表访问权限的组并将他们添加到该新组中。

无法查看沙盒数据的个人是否属于多个组?

根本原因:我们只为每个表允许一个沙盒:如果一个人是两个或更多具有不同权限的组的成员,则每个确定是否允许访问的规则都会变得混乱。因此,我们只允许一个规则。

采取的步骤

管理员可以创建一个新组来精确地确定谁有权访问什么。创建新组

您有不同的问题吗?

阅读其他 Metabase版本 的文档。

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