背景
目前各业务团队的产品经理、产品运营、数据分析师都在使用 Apache Superset 来查询数据仓库中的数据。Superset 能够基于 Hive、ClickHouse、Trino、StarRocks 中的数据进行数据探索和自助制作报表。
诸如投放成本、广告收益这些数据具有一定的敏感性,需要引入数据安全管理功能,对不同安全等级的数据进行权限管理。本文介绍了 Superset 数据安全管理的原理以及在七猫数据仓库中的解决方案。
Superset 数据安全管理的能力介绍
根据官网(https://superset.apache.org/docs/security)的介绍,Superset 能够对接入的数据源、BI 报表(图表)、报表看板(图表集合)、SQL 工具箱(SQL Lab)进行访问权限管理。
Superset 采用了 Role-Based Access Control(RABC) 的权限管理策略。通过将上述权限授权给自定义的 Role ,使得 Role 具备了经过管控的数据访问权限。再将 Role 赋给具体的用户,用户就具备了 Role 的数据访问权限。可以给一个用户赋予多个 Role,该用户的权限是他所有 Role 的并集。
Superset 默认已经创建了以下几个常用的 Role,可直接使用这些 Role 进行权限控制,也能够基于这些 Role 自定义一些新 Role 来进行权限控制。Superset 官网不建议对以下这些基础 Role 进行修改:
Admin:管理员,具备 Superset 所有权限。
Alpha:对所有数据源都有访问权限,但不能将权限授予他人。
Gamma:只能查看他们具备访问权限的数据源、BI 报表、数据看板。这些数据源、BI 报表、数据看板需要另外授权。
sql_lab:SQL 工具箱的访问权限。只有具有 sql_lab 权限的用户才能够使用 SQL 工具箱进行自定义 SQL 探索数据。
Public:几乎没有权限,只能了解 Superset 的 feature。
Superset 数据安全管理的工作原理
Superset 进行数据安全管理的基点是对数据源访问权限的控制。如果某一个用户 A 对数据源 S 没有访问权限,那么该用户无法访问基于 数据源 S 开发出来的 BI 报表和报表看板;在 SQL 工具箱中也无法看到数据源 S。
当用户 A 被授予数据源 S 访问权限之后,他能够在数据源中看到数据源 S。如果想要的 SQL 工具箱中探索这些数据,他必须具备 sql_lab 这个 Role。同理,他想要访问基于数据源 S 开发出来的 BI 报表、报表看板的话,他还需要获取 BI 报表和报表看板的访问权限。这通常是由报表的创建者通过报表分享的功能分享给用户 A 的,并不需要 Superset 管理来进行控制。
看到这里,我们也可以得到一个最佳实践:数据源的访问权限由数据团队管控;BI 报表的访问权限由业务团队管控。
![](https://tech.qimao.com/content/images/2023/02/image-17.png)
在指标体系中,通常会划分成多个数据域,每一个数据域提供一张或者多张主题表对外提供指标访问与使用。将指标和报表的访问权限的管控粒度精确到 数据域 的级别,能够让用户使用一个或者多个数据域中的指标和报表,而不能访问其他数据域中的指标和报表。
对于每一个数据域,根据数据的机密程度,划分成 低 和 高 两种。机密程度低的数据可以被该数据域下的所有用户访问;机密程度高的数据只能被该数据域下具备高级访问权限的用户访问。
Superset 基于数据域的数据访问权限的划分
结合数据域的划分,根据数据域数据访问权限的大小,在 Superset 中可以分为 4 类,分别是:系统管理员、数据管理员、数据域高级用户、数据域普通用户。
- 系统管理员权限:管理系统中所有角色和用户,管理系统中所有数据域的数据源。
- 数据管理员权限:管理和接入各个数据域的数据源。
- 数据域高级访问权限:能够访问所属数据域中的所有数据。
- 数据域普通访问权限:能够访问所属数据域中机密等级低的数据,无法访问机密等级高的数据。
下面通过报表开发的阶段,描述一个以上4中权限发挥的作用。
在初始化阶段,由 系统管理员 创建 数据管理员权限角色、各个数据域高级访问权限角色以及各个数据域普通访问权限角色;创建用户,为各个用户赋予相应的角色。
在数据源接入阶段,数据管理员开发和接入各个数据域的数据源。数据源的粒度可以是:数据库、数据表、数据集(一个或者多个库表加工好的数据计算结果),为所有的数据源标识出高、低机密性(这需要跟各个数据的业务指标负责人讨论确定)。对于机密性高的数据源建议通过数据集(而不是数据库、表)的方式接入数据源,便于安全管控。详情见下文“BI 报表开发流程”部分。
在报表开发阶段,各个数据域的用户可以基于能够访问的数据源,开发各类报表。各类报表开发完之后,默认情况下是报表开发人员私有的,只能自己访问。如果其他用户想要访问这些报表,可以向
报表开发人员申请访问权限。报表开发人员只要通过 Superset 界面,将报表共享给报表使用人员即可。详情见下文“BI 报表使用流程”部分。
⚠️需要注意的是:只有同时具备报表的访问权限和报表底层数据的访问权限时,报表使用人员才能访问报表。
Superset 报表开发流程与报表使用流程
注意:流程图中涉及到的数据权限申请,走 TAPD 申请,发送给系统管理员,抄送给报表开发人员和数据域的数据管理员。
BI 报表开发流程
![](https://tech.qimao.com/content/images/2023/02/image-18.png)
BI 报表使用流程
![](http://wiki.km.com/download/attachments/50596700/image2022-11-30_16-23-23.png?version=1&modificationDate=1669796604000&api=v2)
![](https://tech.qimao.com/content/images/2023/02/image-19.png)