模拟权限
目前,模拟访问仅适用于 MySQL、PostgreSQL、Redshift、Snowflake 和 SQL Server。如果您想根据登录用户切换数据库连接,请查看 数据库路由。
如果您在 PostgreSQL 中使用视图,视图上的行级安全策略仅在 PostgreSQL 15 及更高版本中有效。
本页介绍 “查看数据” 权限级别,称为模拟。
模拟访问允许管理员将“查看数据”权限“外包”给数据库中的角色。管理员可以将用户属性与数据库定义的角色及其权限关联起来。如果某人所在的群组的“查看数据”权限设置为模拟,则该人将能够根据其用户属性指定的角色所授予的权限来查看和查询数据。
设置连接模拟
**要使 Redshift 数据库的模拟功能正常工作,Metabase 用于 连接到您的 Redshift 数据库 的用户帐户必须是超级用户,因为 Metabase 需要能够运行 SET SESSION AUTHORIZATION 命令,该命令只能由数据库超级用户运行。
要使模拟访问生效,您首先需要在数据库中为 Metabase 设置模拟角色,然后配置 Metabase 以便在用户查看或查询数据时模拟这些角色。
在您的数据库中设置角色
- 创建一个新角色(在 Redshift 中,这将是一个新用户)。
- 授予该角色权限。
有关如何在数据库中创建新角色并授予该角色权限的具体方法,您需要查阅数据库的文档。我们还有一些关于 用户、角色和权限 的文档,可以帮助您入门。
在 Metabase 中设置模拟并指定用户属性
-
创建一个 新群组,或选择一个现有群组。
-
为该群组中的人员分配一个用户属性。 您将使用此用户属性将该群组中的人员与您在数据库中创建的角色关联起来。例如,如果您在数据库中创建了一个名为
sales
的角色,该角色有权访问与销售团队相关的部分表格,那么您将添加一个名为db_role
的用户属性(或任何您想称呼的属性),并将值sales
分配给该人员的db_role
。属性的值(在本例中为sales
)应与数据库中的角色名称匹配。只有部分数据库强制区分大小写,因此您可能需要确保属性值和数据库角色完全匹配。 -
将模拟访问权限应用于该群组。 按下 Cmd/Ctrl + K 调出命令面板。搜索 权限。或者前往 管理设置 > 权限 > 数据。
-
选择您要设置权限的数据库。
-
找到您想要与您创建的数据库角色关联的组。在该组的“查看数据”设置下,选择“模拟”。
-
从下拉菜单中,选择您添加的、映射到您希望该组在查询数据库时使用的角色的用户属性。
-
保存您的更改。
具有数据模拟访问权限的组中的用户不一定共享相同的权限
Metabase 将为每个人使用您在用户属性中指定的任何角色。例如,如果您选择 db_role
属性进行模拟,一个人的 db_role
可以是 sales
,另一个人的可以是 engineering
,或者映射到数据库中有效角色的任何其他值。
使用模拟来设置行级 SQL 访问
您可以使用模拟来授予用户对原生/SQL 编辑器的访问权限,同时根据特定的数据库角色限制他们对数据的访问。这不仅仅是表级访问,而是行级访问——或者您在数据库中为该角色定义的任何访问方式。实际上,您可以使用模拟来设置类似数据沙箱的数据访问,同时让用户使用 SQL 编辑器查询这些数据。不同之处在于,您需要在数据库中通过授予角色的权限来设置行级安全,而不是在 Metabase 中设置数据沙箱。
如果您希望授予某个组对数据库中部分(而非全部)模式或表的 SQL 访问权限,您可以在数据库中创建一个额外的角色,该角色仅包含这些表的一个子集——甚至特定的行级访问权限——然后使用 Metabase 的模拟功能将用户属性与该角色关联起来。Metabase 的作用是将用户属性作为字符串传递给数据库的 SET ROLE
或 USE ROLE
命令,在 Metabase 执行查询之前。
连接模拟不适用于 Metabase 管理员组中的用户,因为他们更宽松的权限优先。
有关如何设置此功能的更多信息,请查看使用模拟通过 GUI 和 SQL 查询获取行级权限。
Metabase 为用户提供其所有组中最宽松的数据访问权限
因此,如果一个人在两个对同一数据库具有不同权限的组中
- 红色组,具有模拟访问权限,限制其可见内容。
- 蓝色组,“查看数据”设置为“可查看”,“创建查询”设置为“查询生成器和原生”。
蓝色组更宽松的访问权限将覆盖模拟访问权限。
延伸阅读
阅读其他Metabase 版本的文档。