如何在 Superset UI 中使用行级安全性

How to use row level security in Superset UI

我正在使用最新版本的 superset,它在 UI 中有行级安全选项。任何人都可以帮助我并让我知道或稍微介绍一下我如何在 UI 中实现它并使用它。那里几乎没有太多文档。任何帮助都是有益的。

行级安全性 (RLS) 允许管理员将 WHERE 谓词强制加入代表用户发送到数据库的查询 SQL 语句。

这可用于将查询结果限制为明确满足或不满足特定条件的行,并因此导致返回给用户的列表或行被过滤。可以根据目标 table(s) 和用户角色应用标准。

本斯 本斯@preset.io

行级安全性基本上像 WHERE 子句一样工作。假设我们使用名为 tbl_org 的 table 构建了一个仪表板,它看起来像:

manager_name    department  agent
Jim             Sales       Agent 1
Jim             Sales       Agent 2
Jack            HR          Agent 3
Jack            HR          Agent 4

比如说,我们只需要在 Jim 登录时显示 rows/records 他在仪表板上的经理位置。Jack 也一样。这时候RLS就派上用场了。

超集UI提供了三个需要填写的字段。

  1. Table:我们要应用 RLS 的 table。在这种情况下将是 tbl_org
  2. 角色:您希望应用此规则的一个或多个角色。假设我们使用 Gamma 角色。
  3. 子句:SQL条件。当执行查询以获取仪表板数据时,此处提供的条件将应用于 where 子句。因此,例如,如果您使用条件 manager_name = Jim,这将导致查询:SELECT * from tbl_org where manager_name = Jim

如果您想根据登录用户动态过滤 table,您可以使用 jinja 模板:

manager_name = '{{current_username()}}'

为此,在 Superset 中创建的用户名需要与 tbl_org

中的 manager_name 列相匹配

如果你想让 [manager_name = '{{current_username()}}'] 有意义, 您必须在 config.py.

中添加 ["ENABLE_TEMPLATE_PROCESSING": True]