使用模拟获取 GUI 和 SQL 查询的行级权限

在您的数据库中创建角色,并让 Metabase 在查询数据库时模拟这些角色。

模拟是 专业版/企业版 功能,目前仅适用于 PostgreSQL、Redshift 和 Snowflake。

模拟是 Metabase 中的一项权限设置,允许您在数据库中管理权限。通过模拟,您可以将用户属性一直传递到数据库层,这意味着您可以在数据库执行查询之前设置一个角色。

模拟 vs 数据沙盒

模拟为 SQL 编辑器和查询构建器中编写的问题设置权限

模拟在数据库级别运行。在数据库引擎中,在查询运行之前设置角色可以改变查询结果,因为该角色定义了数据库执行语句时应使用的权限。

数据沙盒仅为查询构建器问题设置权限

数据沙盒在 Metabase 级别运行。由于 Metabase 无法解析 SQL 查询以确定用户被允许查看哪些数据,因此数据沙盒仅适用于在查询构建器中编写的问题(Metabase 可以解释这些查询)。

模拟的用例示例

假设我们有一个“人员”表,其中包含来自美国所有 50 个州的用户账户行。

假设您希望您的佛蒙特州销售团队能够

  • 能够使用查询构建器和原生 SQL 编辑器提问。
  • 只能查看“人员”表中居住在佛蒙特州的客户账户。

首先,您将在数据库中通过创建具有策略的角色来设置权限。然后在 Metabase 中,您将把对该数据库的数据访问权限设置为模拟,这样当用户在该数据库上运行查询时,Metabase 将使用该角色来限制他们可以看到的数据。

在数据库中设置权限

假设您正在使用 Postgres,请使用任何 SQL 客户端(例如 psql)登录到您的数据库。

您将创建一个名为 vermont_sales_team 的角色,并且只允许该角色选择 people 表中 state 列的值为 VT(佛蒙特州的缩写)的行。

CREATE ROLE vermont_sales_team;

GRANT
SELECT ON ALL TABLES IN SCHEMA PUBLIC TO vermont_sales_team;


CREATE POLICY vermont ON people
FOR
SELECT TO vermont_sales_team USING (state = 'VT');


ALTER TABLE people ENABLE ROW LEVEL SECURITY;

在 Metabase 中设置群组

在 Metabase 中,点击齿轮图标,然后前往管理设置 > 人员 > 群组。点击创建群组。将其命名为“佛蒙特州销售团队”。

将一个人添加到该群组(如果需要,可以创建一个测试用户)。

为用户账户添加属性

管理设置中,前往人员并找到该用户的账户。编辑其账户并点击添加属性

在这里,您将把一个属性与一个角色关联起来:将 database_rolevermont_sales_team 关联。

Adding a user attribute to an account to specify which role Metabase should pass to the database.

将群组权限设置为模拟

您需要限制“所有用户”群组的默认权限,然后为您的新群组添加模拟权限。

  1. 前往管理设置 > 权限 > [您的数据库]

  2. 限制“所有用户”群组的权限。

    属于多个群组的用户拥有其所有群组中最宽松的访问权限。由于每个 Metabase 用户都属于“所有用户”群组,因此我们需要限制“所有用户”群组的权限,以防止它们覆盖佛蒙特销售团队的模拟权限。

    通过设置来限制“所有用户”的权限:

    • 查看数据设为已阻止
    • 创建查询设为
  3. 对于“佛蒙特州销售团队”群组,将查看数据权限更改为“模拟”。

    Metabase 将要求您选择要传递给数据库的用户属性,因此请选择我们之前创建的 database_role 属性。

  4. 对于“佛蒙特州销售团队”群组,将创建查询设为查询构建器和原生

    这些权限将允许“佛蒙特州销售团队”群组创建查询构建器问题和原生 SQL 查询。

因此,您的数据库的权限设置将如下所示

Data access set to Impersonated with Native querying set to Yes.

验证模拟权限是否生效

以“佛蒙特州销售团队”群组中的用户身份登录。前往左侧导航栏中的浏览数据,然后进入示例数据库。如果您点击人员表,您应该只能看到居住在佛蒙特州的人员。

当“佛蒙特州销售团队”群组中的用户编写 SQL 问题时,相同的权限也适用。

SELECT * FROM people;

People who live in Vermont.

结果应仅包含佛蒙特州的人员。订阅和警报也应应用这些权限。

下一步:配置多租户数据权限

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

下一篇文章
© . All rights reserved.