配置嵌入权限
您可以使用一个 Metabase 来管理所有客户的权限。您使用哪个 Metabase 权限工具取决于您如何存储客户数据。
所有客户一个数据库(混合设置)
如果所有客户数据都在同一个模式和相同的表中(通常称为“数据混合”)。
| 租户ID | 列 1 | 列 2 |
|---|---|---|
| A | … | … |
| B | … | … |
| C | … | … |
您可以使用
基于租户 ID 限制行
假设您有一个名为 **Data** 的表,如下所示:
| 租户ID | 指标 | 洞察 |
|---|---|---|
| A | … | … |
| B | … | … |
| C | … | … |
要根据 Tenant_ID 为不同租户显示 **Data** 的过滤版本,您可以应用行和列安全。
这意味着租户 A 将看到 Tenant_ID = A 的行,租户 B 将看到 Tenant_ID = B 的行。
基本的行级别安全将这样工作:
- 创建一个组,例如“受限租户”,并将人员的 Metabase 账户添加到该组。
- 添加用户属性。对于每个人的账户,添加一个用户属性,例如
Tenant_ID,并将用户属性值设置为“A”、“B”或“C”。 - 为该组的表添加行级别安全。请参阅行和列安全。
基于租户限制列
假设您的 **Insights** 列是一项高级功能,而租户 B 是唯一付费查看这些 **Insights** 的客户。
| 租户 ID | 指标 | 洞察 |
|---|---|---|
| A | … | |
| B | … | … |
| C | … |
为了防止 A 和 C 查看 Insights 列,您可以添加列级别安全来限制他们查看表时看到的行和列。
- 创建一个名为“仅指标租户”的组。
- 将租户 A 和 C 添加到组中。在限制数据时,请确保每个 Metabase 账户只属于一个组。
- 添加一个用户属性,例如
Tenant_ID,并将用户属性值设置为“A”或“C”。 -
接下来,您将使用 **Data** 表创建一个 SQL 问题,如下所示:
SELECT Tenant_ID, Metrics FROM data WHERE Tenant_ID = {{ tenant_user_attribute }} - 将 SQL 问题另存为“客户指标”。
- 使用“仅指标租户”组和“客户指标” SQL 问题添加行和列安全。
例如,当租户 A 登录时,他们将只看到 Tenant_ID 和 Metrics 列,并且只看到 Tenant_ID = A 的行。
模拟允许您使用数据库角色管理访问权限
模拟允许您将用户属性映射到数据库角色,从而基于您授予每个角色的数据库权限实现行级别安全。
请查看这篇关于模拟的文章。
每个客户一个数据库
如果您的每个客户都有自己的数据库,您可以使用数据库路由来为查询切换数据源。使用数据库路由,您只需构建一次仪表板,Metabase 就会根据登录用户切换查询的数据库。
但是,为了使数据库路由生效,每个数据库中的模式必须相同。
为了对个人可以看到的内容进行更细粒度的控制,即使在同一租户内,您还可以将 Metabase 提供的其他工具,例如行和列安全和连接模拟,与数据库路由结合使用。
多个模式(每个客户一个模式)
如果您的客户数据存储在同一个模式中的不同表中,或者在一个数据库中的不同模式中,如下所示:
租户 A 的模式
| 租户 A | 列 1 | 列 2 |
|---|---|---|
| 行 1 | … | … |
| 行 2 | … | … |
| 行 3 | … | … |
租户 B 的模式
| 租户 B | 列 1 | 列 2 |
|---|---|---|
| 行 1 | … | … |
| 行 2 | … | … |
| 行 3 | … | … |
您可以
与混合数据不同,每个客户一个模式的数据与行和列安全不兼容,因为它在表级别工作,而不是在模式级别。
授予客户对其模式的自助服务或仅查看访问权限
假设您有一个包含十个不同表的单个数据库,每个表对应一个不同的客户(公司)。您希望每个客户只能访问他们自己的表。
-
在管理设置 > 人员中为您的第一个客户创建一个组。如果您需要在公司内部设置不同的权限级别(一些员工可以提问,另一些只能查看),请创建多个组,例如公司 A(自助服务)和公司 A(仅查看)。
-
通过转到“权限” > “数据” > “数据库”并授予新组对客户表的访问权限来授予表访问权限。如果您希望客户在他们的表内创建问题和仪表板,请将创建查询权限设置为查询生成器。
对于应该只查看数据并创建集合来容纳这些特定问题和仪表板的员工,请参阅集合权限。
避免授予原生 SQL 编辑器访问权限 — 这会让人们查询他们不应该看到的表。
如果您将每个组的权限范围限定为单个表,Metabase 将隐藏您添加到数据库中的任何新表。
-
邀请您的第一个用户并将其添加到适当的组。如果您使用的是SSO,则可以跳过此步骤。
-
通过执行步骤 1-3 为每个客户重复此过程。
授予客户对其模式的原生 SQL 访问权限
如果您需要原生 SQL 查询
-
为您的第一个客户创建一个数据库级别用户帐户(在您的数据库中,而不是在 Metabase 中)。此数据库用户应仅拥有对其特定表或模式的访问权限。例如,对于 PostgreSQL,您可以通过 psql 添加用户,并仅授予他们对其表的权限。
-
使用您刚创建的数据库用户帐户将 Metabase 连接到您的数据库。请参阅数据库。
-
在 Metabase 中创建一个新组并授予其对新数据库连接的访问权限。由于数据库用户角色控制了可见的内容,因此您可以授予该组对数据库的可以查看访问权限,以及查询生成器和原生访问权限。请参阅组。
组内成员将看到数据库用户可以访问的所有表。要稍后隐藏表,您需要在数据库本身中更改权限,而不是在 Metabase 中。
-
邀请您的第一个用户并将其添加到适当的组。如果您使用的是SSO,则可以跳过此步骤。
-
通过执行步骤 1-4 为每个客户重复此过程。您最终将拥有与客户数量相同的数据库连接。
阅读其他版本的 Metabase 的文档。