问题排查:沙盒访问行和列

数据沙盒让某些用户只能访问部分数据。(该术语源于让儿童在沙盒中安全玩耍的做法。)为了实现沙盒功能,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 版本的文档。

© . All rights reserved.