排查沙盒对行和列的访问问题

数据沙盒 允许某些人仅访问部分数据。(该术语来源于将儿童放在沙箱中安全玩耍的做法。)为了实现沙盒,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 版本的文档。