配置嵌入权限
您可以使用单个 Metabase 来管理所有客户的权限。使用哪种 Metabase 权限工具取决于您如何存储客户数据。
所有客户共用一个数据库(混合设置)
如果所有客户数据都在相同的模式和相同的表中(通常称为“数据混合”)
Tenant_ID | 列 1 | 列 2 |
---|---|---|
A | ... | ... |
B | ... | ... |
C | ... | ... |
您可以使用
根据租户 ID 限制行
假设您有一个名为 Data 的表,它看起来像这样
Tenant_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 行 | ... | ... |
您可以
与混合数据不同,每个客户一个模式的数据与行和列安全不兼容,因为它在表级别工作,而不是模式级别。
授予客户对其模式的自助服务或只读访问权限
假设您有一个包含十个不同表的数据库,每个表对应一个不同的客户(公司)。您希望每个客户只能访问自己的表。
-
在 Admin settings > People 中为您第一个客户创建组。如果您需要公司内部的不同权限级别(有些员工可以提问,有些只能查看),请创建多个组,例如 公司 A(自助服务) 和 公司 A(只读)。
-
通过转到 Permissions > Data > Databases 并授予新组对客户表的访问权限来授予表访问权限。如果您希望客户在他们的表中创建问题和仪表板,请将 创建查询 权限设置为 查询构建器。
对于只应查看数据并创建集合以存放特定问题和仪表板的员工,请参阅 集合权限。
避免授予本地 SQL 编辑器访问权限——它允许人们查询他们不应该看到的表。
如果您将每个组的权限范围限定为单个表,Metabase 将隐藏您添加到数据库的任何新表。
-
邀请您的第一个用户并将其添加到适当的组。如果您使用 SSO,则可以跳过此步骤。
-
按照步骤 1-3 为每个客户重复此过程。
授予客户对其模式的本地 SQL 访问权限
如果您需要本地 SQL 查询
-
为您第一个客户创建数据库级用户帐户(在您的数据库中,而不是在 Metabase 中)。此数据库用户应仅具有对其特定表或模式的访问权限。例如,对于 PostgreSQL,您可以通过 psql 添加用户,并且只授予他们对其表的权限。
-
使用您刚刚创建的数据库用户帐户将 Metabase 连接到您的数据库。请参阅 数据库。
-
在 Metabase 中创建新组并授予其对新数据库连接的访问权限。由于数据库用户角色控制可见内容,您可以授予该组对数据库的 可查看 访问权限以及 查询构建器和本地 访问权限。请参阅 组。
组成员将看到数据库用户可以访问的所有表。要稍后隐藏表,您需要在数据库本身更改权限,而不是在 Metabase 中。
-
邀请您的第一个用户并将其添加到适当的组。如果您使用 SSO,则可以跳过此步骤。
-
按照步骤 1-4 为每个客户重复此过程。您最终将拥有与客户数量一样多的数据库连接。
阅读其他版本的 Metabase 的文档。