如前文所述,Superset初始化权限之后,创建5个角色,分别为Admin,Alpha,Gamma,sql_lab以及Public。Admin,Alpha和Gamma角色,分配了很多的菜单/视图权限,如果手工去修改,改错的可能性很大,加之Superset并没有说明每一项权限的完整文档,所以不建议去修改这些角色的定义。灵活使用预置的角色,可以快速满足业务上安全控制需求。
本文先介绍这几个角色,然后结合实际的安全访问控制的场景,看在Superset中怎样实现。
角色权限介绍
Admin:
拥有所有权限。
Alpha:
能访问所有数据源,增加或者更改数据源,但不能给更改其他用户权限。
Gamma:
必须结合其他能访问数据源的角色才能访问数据。这个角色所能访问的切片和看板,也是基于能访问数据源所创建的切片和看板。
sql_lab:
能访问SQL Lab菜单。
Public:
默认没有任何权限。
下面列举几种业务需求,看怎样应用这些角色来满足。
匿名访问
所有用户都能访问某一个看板,需要进行如下设置:
(1) 更改config.py文件,设置如下部分,PUBLIC_ROLE_LIKE_GAMMA = True
(2) 然后需要运行superset init命令,这个命令会给“Public”角色设置与“Gamma”一样的权限。官方文档并没有说明必须要运行这个命令。如果你是在安装过程中已经运行了“superset init”命令,你再设置“PUBLIC_ROLE_LIKE_GAMMA = True”,这个设置将不起作用。但你可以手动给“Public”角色分配与“Gamma”一样的权限(巨大的工程)。或者你熟悉superset的表结构,也可以通过sql语句来批量分配。
(3) 将匿名用户所需要访问的数据库和数据源分配给“Public”角色。例如,基于main数据库的ab_permission_view创建了看板,如果匿名用户需要查看这个看板,那将如下权限分配给“Public”。
图一:将需要访问的数据库
和数据源添加给Public角色
完成上述步骤之后,匿名用户可以看到菜单(请参考图二)。
图二:Gamma的权限能访问的菜单
能访问的菜单较多,这是因为“Gamma”所拥有的权限比较多,“Public”所拷贝的菜单也会很多。如果只想让匿名查看具体的一个看板(但不能查看看板列表,切片列表,数据源列表等等),可以简单的将如下权限分配给“Public”角色,请参考图三。
图三:查看某一个看板所需要的最小权限
接下来验证看是否匿名访问这个看板,管理员用户访问看板列表,复制(参考图四)看板的链接地址。
图四:复制看板的链接地址
用隐私模式打开浏览器,粘贴上一步拷贝的地址,不用登录,匿名用户就可以看到对应看板。如果想访问其他的地址,会转到登录窗口,需要输入用户名和密码。
图五:匿名用户能访问指定的看板
角色权限介绍
实际业务中,不同的职能部门访问的数据不一样,例如财务部需要访问成本,应收,应付等数据,供应链需要访问库存数量,发货数据等,怎样简洁的设置,快速满足这种业务需求?
如前文所述,“Gamma”拥有大部分基础的权限,但是必须结合其他能访问数据源的角色才能访问数据。所以,可以给用户分配“Gamma”角色和针对部门分别创建的数据源角色来进行控制。
例如,针对财务用户,创建角色“Finance”,将成本,应收,应付的数据表权限赋予这个角色,财务用户就分配“Gamma”和“Finance”。
针对供应链用户,创建角色“SCM”,将库存和发货数据表权限赋予这个角色,供应链用户就分配“Gamma”和“SCM”。
如果是公司的霸道总裁,需要看所有的看板,就可以给霸道总裁赋予“Gamma”和“Finance”,“SCM”角色。
说明图请参考图六。
图六:Gamma结合创建角色实现
数据源的访问控制
字段级别控制
实际业务还有需要在字段级别控制访问的需求,例如HR部门中,HR员工可以看员工的基本信息,但是薪酬部的同事需要查看员工的薪酬数据。所以需要控制薪酬数据字段的访问。
一种直观的想法,根据上一节“按职能部门访问不同数据”的方法,建立两个角色,一个角色可以访问表只包含员工基本信息,另一个角色可以访问的数据表还包含薪酬数据。这样也是可以满足需求。
其实Superset可以在字段粒度上进行控制,但在当前版本(0.22.1)上,有用户提交issue,尚未解决。先可以了解步骤,等待问题解决了,将来在新的版本中可以设置。对应的步骤如下:
(1) 编辑表的对应的指标列,将“Is Restricted”选中,请参考图七
图七:设置指标列的访问控制
(2) 系统会针指标列(例子中指标列为“rev”)创建类似“metric access on [main].[ab_permission_view].[rev](id:1)”权限,然后将这个权限分配给需要访问这一列的角色。
这样可以实现字段基本的控制。Github关于这个问题的Issue可以参考如下链接:
https://github.com/apache/incubator-superset/issues/3938
https://github.com/apache/incubator-superset/issues/2326
本文列举了权限使用几种场景,以及在Superset中怎样通过设置来满足权限的需求。关于安全的更深入的应用,例如怎样和其他系统集成,等待后续整(li)理(jie)之后再分享。写完这篇,2018年的大门就要悄悄打开了,我很向往。
本文来自企鹅号 - haiyunclassone媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文来自企鹅号 - haiyunclassone媒体
如有侵权,请联系 cloudcommunity@tencent.com 删除。