配置多租户数据权限

了解如何限制客户对行、列或架构的访问,以实现安全的自助服务分析。

具有多个客户的单一架构(混合数据)

如果您的所有客户数据都在同一架构和同一表格中(通常称为“数据混合”)

租户 ID 列 1 列 2
A
B
C

数据沙盒 是最佳选择。大多数使用 Metabase 交付多租户分析的组织将使用

  • 行限制沙盒(又名基本沙盒)来隐藏与租户 ID 不匹配的租户的行。
  • 列限制沙盒(自定义沙盒)来隐藏特定租户的列。

您还可以配置带有数据沙盒权限的 SSO,以便人们从首次登录开始就获得正确的行和列访问级别。要了解有关多租户权限和嵌入如何协同工作的更多信息,请参阅 使用 SSO 和数据沙盒保护数据

根据租户 ID 限制行

假设您有一个名为 Data 的表格,如下所示

租户 ID 卓越指标 深刻见解
A
B
C

您可以创建一个基本沙盒,以根据租户 ID 向不同租户显示 Data 的过滤版本。这意味着租户 A 将看到 Tenant ID 列的值为“A”的行,租户 B 将看到 Tenant ID 列的值为“B”的行,依此类推。

以下是基本沙盒的工作原理

  1. 您将创建一个组,例如“沙盒租户”,并将人员的 Metabase 帐户添加到该组。
  2. 对于每个人的帐户,您将添加用户属性,例如“租户 ID”,并将用户属性值设置为“A”、“B”或“C”。
  3. 设置具有用户属性的组后,从您的 管理设置 > 权限 创建一个基本沙盒

基本沙盒将显示 Data 表格,其中对 Tenant ID 列应用了过滤器。过滤器值将根据每个人的登录动态设置。例如,用户属性“租户 ID”设置为“A”的帐户将看到 Data 表格,该表格按 Tenant ID = A 过滤。

根据租户限制列

现在,假设您的 Insane Insights 列是一项高级功能,而租户 B 是唯一付费查看这些 Insane Insights 的客户。租户 A 和 C 正在省钱,因此他们只能看到 Marvelous Metrics

租户 ID 卓越指标 深刻见解
A
B
C

在这种情况下,您可以将租户 A 留在行限制示例中的基本沙盒中。但是您需要将租户 A 和 C 移动到自定义沙盒 — 这将允许您除了行之外还限制列。

以下是您如何设置自定义沙盒以选择性地隐藏列(除了将租户限制为他们自己的行之外)

  1. 创建一个名为“仅指标租户”的组。
  2. 将租户 A 和租户 C 的人员移动(或添加)到“仅指标租户”组。

    当您以不同方式为不同组沙盒化 Data 表格时,请确保每个 Metabase 帐户仅属于一个组 — “沙盒租户”或“仅指标租户”。

  3. 对于每个人的 Metabase 帐户,您都必须添加用户属性,例如“租户 ID”,并将用户属性值设置为“A”、“B”或“C”。
  4. 接下来,您需要使用 Data 表格创建一个 SQL 问题,如下所示

    SELECT marvelous_metrics
    FROM tenants
    WHERE tenant_id =  {{ tenant_user_attribute }} 
    
  5. 将 SQL 问题另存为“卓越指标”。
  6. 创建一个自定义沙盒,使用“仅指标租户”组和“卓越指标”SQL 问题。

自定义沙盒将向“仅指标租户”组中的人员显示“卓越指标”SQL 问题(代替原始 Data 表格)。

例如,用户属性“租户 ID”设置为“A”的人员将仅看到 Data 表格中的 Marvelous Metrics 列,该列已过滤为 Tenant ID 列的值为 A 的行。

多个架构(每个客户一个架构)

如果您的客户数据存储在同一架构或一个数据库中不同架构的单独表格中,如下所示

租户 A 的架构

租户 A 列 1 列 2
行 1
行 2
行 3

租户 B 的架构

租户 B 列 1 列 2
行 1
行 2
行 3 ..

您可以选择

与混合数据不同,每个客户一个架构(反社交?)数据与沙盒不兼容,因为沙盒只能在行和列级别分配权限,而不能在架构级别分配权限。

授予客户对其架构的自助服务或只读访问权限

假设您有一个包含十个不同表格的数据库,并且这些表格中的每一个都对应一个客户(在本例中为不同的公司)。我们的目标是确保每个客户只能访问包含其自身信息的表格。

注意:以下方法假设您的客户不需要访问 Metabase 的本机 SQL 编辑器,而是使用查询构建器来提出问题。

  1. 如果您尚未这样做,请将您的数据源连接到 Metabase。

  2. 管理设置 > 权限 > 数据 中,阻止所有用户组访问数据库。

  3. 管理设置 > 人员 中,为您的第一个客户创建一个组。您可能每个公司只需要一个组,但如果您的客户希望他们的一些员工能够提出问题,而另一些员工只能查看问题,则您需要为每个客户创建多个组,以便您可以设置不同的权限级别。根据某些已定义的约定命名您的组可以帮助您保持井井有条 — 考虑类似 公司 A(自助服务)公司 A(仅查看) 的名称。

  4. 返回到 权限 > 数据 > 数据库 页面,然后授予您新创建的组对与正确客户对应的表格的访问权限。如果您希望您的客户能够在其表格中提出问题和创建仪表板,请将其 创建查询 权限更改为 查询构建器。在此上下文中,创建查询访问权限是指表格,而不是整个数据库。

    如果您的客户有一些员工应该只查看数据(而不是拥有自助服务访问权限),您需要创建集合来存放这些特定问题和仪表板。请参阅集合权限

    避免授予您的组访问本机 SQL 编辑器的权限,因为这种本机查询编辑允许人们查询他们无法在 Metabase 中看到且不应有权访问的表格。

  5. 邀请您的第一个用户,并在过程中将其添加到相应的组。如果您使用SSO 来处理帐户创建,则无需手动邀请用户。

  6. 重复步骤 3-5 以添加您的十个客户中每个客户的用户帐户。

如果您授予组对数据库中所有表格的访问权限,然后在以后修改数据库以包含新表格,则 Metabase 将默认授予该组对新表格的访问权限。但是,如果您已将每个组的权限限定为单个表格(就像我们在上面所做的那样),则 Metabase 将默认隐藏您添加的任何新表格。

授予客户对其架构的本机 SQL 访问权限

由于 Metabase 的 SQL 编辑器需要对您的整个数据库进行无限制的访问,因此使用上述方法启用它将让您的客户查询不属于他们的表格。如果本机 SQL 查询对于您的客户来说是必须的

  1. 在数据库级别(而不是在 Metabase 中)为您的第一个客户创建一个用户帐户。此用户帐户应仅有权访问其数据库中特定的表格或架构。例如,如果您有 Postgres 数据库,则需要通过 psql 将用户添加到您的数据库中。在 Postgres 中,您随后将仅向他们授予对您希望客户看到的表格的权限。

  2. 在 Metabase 中,使用您刚刚在数据库中创建的用户帐户添加与数据库的连接

  3. 在 Metabase 中创建一个新的。授予该组访问您新添加的数据库的权限 — 即,与该客户架构对应的连接。由于数据库级别的用户角色决定了您的客户可以查看的内容,因此您可以授予该组 可以查看 数据库的访问权限以及 查询构建器和本机 访问权限。

    属于该组的人员将能够看到 Metabase 中 Postgres 用户(或您使用的任何数据库)在数据库中有权访问的所有表格。如果您想稍后隐藏表格,则需要在数据库本身中更改权限,而不是在 Metabase 中更改权限。即使您在 Metabase 中隐藏了表格,具有本机访问权限的人员仍然可以查询它们。

  4. 邀请您的第一个用户,并在过程中将其添加到相应的组。如果您使用SSO 来处理帐户创建,则无需手动邀请用户。

  5. 对您的其余客户重复步骤 1-4。在 Metabase 中,看起来您添加的数据库数量与您拥有的客户数量一样多。

以编程方式创建沙盒权限

如果您要为成百上千的客户提供服务,请考虑使用Metabase API 编写权限过程脚本。如果您需要设置新的 Metabase 实例,或者想要为您的每个客户复制相同的仪表板和保存的问题,则序列化功能(在 Pro 和企业版套餐 上可用)可以帮助加快速度。请记住,序列化包括权限设置,因此您需要编写脚本或手动配置哪些组可以访问每个表格。

延伸阅读

下一步:如何密切关注您的数据

设置使用情况分析的警报,以便在有人更改设置、下载数据或公开数据时收到通知。

下一篇文章