模拟权限

模拟访问权限仅在 ProEnterprise 计划(自托管和 Metabase 云)中可用。

目前,模拟访问权限仅适用于 PostgreSQL、Redshift 和 Snowflake。

此页面涵盖名为“模拟”的查看数据权限级别。

模拟访问权限允许管理员将“查看数据”权限“外包”给数据库中的角色。管理员可以将用户属性与数据库定义的角色及其权限相关联。如果某人所在的群组的“查看数据”权限设置为“模拟”,则该人员将能够根据其用户属性指定的角色所授予的权限查看和查询数据。

设置连接模拟

**为了使模拟适用于 Redshift 数据库,Metabase 用来连接到 Redshift 数据库的用户帐户必须是超级用户,因为 Metabase 需要能够运行 SET SESSION AUTHORIZATION 命令,该命令只能由数据库超级用户运行。

为了使模拟访问权限起作用,您首先需要在数据库中为 Metabase 设置要模拟的角色,然后配置 Metabase 以在用户查看或查询数据时模拟这些角色。

在数据库中,设置角色

  1. 创建一个新角色(在 Redshift 中,这将是一个新用户)。
  2. 授予该角色权限。

有关如何在数据库中创建新角色并授予该角色权限的确切方法,您需要查阅数据库的文档。我们还有一些关于用户、角色和权限的文档,可以帮助您入门。

在 Metabase 中,设置模拟并指定用户属性

  1. 创建新群组,或选择现有群组。

  2. 为该群组中的人员分配用户属性 您将使用此用户属性将该群组中的人员与您在数据库中创建的角色关联起来。例如,如果您在数据库中创建了一个名为 sales 的角色,该角色有权访问与销售团队相关的表子集,则您可以添加一个名为 db_role (或您想调用的任何属性)的用户属性,并将值 sales 分配给该人员的 db_role。属性的值(在本例中为 sales )应与数据库中角色的名称完全匹配。只有某些数据库强制区分大小写,因此您可能需要确保属性的值和数据库的角色完全匹配。

  3. 将模拟访问权限应用于该群组。。按 Cmd/Ctrl + K 打开命令面板。搜索 权限。或者转到 管理设置 > 权限 > 数据

  4. 选择您要设置权限的数据库。

  5. 找到您要与您创建的数据库角色关联的群组。在该群组的 查看数据 设置下,选择 模拟

  6. 从下拉列表中,选择您添加的、映射到您希望群组在查询数据库时使用的角色的用户属性。

  7. 保存您的更改。

具有数据模拟访问权限的群组中的人员不一定共享相同的权限

Metabase 将对每个人使用您在用户属性中指定的任何角色。例如,如果您为模拟选择了 db_role 属性,则一个人的 db_role 可能是 sales,另一个人的可能是 engineering,或任何其他映射到数据库中有效角色的值。

使用模拟设置行级 SQL 访问权限

您可以使用模拟为用户提供对原生/SQL 编辑器的访问权限,同时根据特定的数据库角色限制他们对数据的访问。不仅是表级访问权限,还有行级访问权限,或者您在数据库中为该角色定义的任何访问权限。实际上,您可以使用模拟来设置类似于数据沙箱的数据访问权限,同时让用户可以使用 SQL 编辑器来查询该数据。不同之处在于,您需要在数据库中通过授予角色的权限来设置行级安全性,而不是在 Metabase 中设置数据沙箱。

如果您想授予群组对该数据库中某些(但不是全部)模式或表的 SQL 访问权限,您可以在数据库中创建一个额外的角色,该角色仅包含这些表的子集,甚至包括特定的行级访问权限,然后使用 Metabase 的模拟功能将用户属性与该角色关联起来。本质上,Metabase 将执行的操作是获取用户属性,并在 Metabase 执行查询之前将该属性作为字符串传递到数据库的 SET ROLEUSE ROLE 命令中。

连接模拟不适用于 Metabase 管理员群组中的人员,因为他们更宽松的权限优先。

有关如何设置此功能的更多信息,请查看使用模拟通过 GUI 和 SQL 查询获得行级权限

Metabase 为用户提供在所有群组中最宽松的数据访问权限

因此,如果一个人在两个对同一数据库具有不同权限的群组中

  • 红色群组具有模拟访问权限,限制了他们可以看到的内容。
  • 蓝色群组的“查看数据”设置为“可以查看”,“创建查询”设置为“查询构建器和原生”。

红色群组更宽松的访问权限将覆盖模拟访问权限。

延伸阅读

阅读其他版本的 Metabase的文档。