今天客户问了一个问题,正好图书出版也没有细致写这一章节,借此机会整理在此,后期修订时作为补充。

  • 场景:集团企业在使用Tableau,通过Tableau Server为企业各业务经理、主管、员工多层次员工提供受控的权限访问。
  • 问题:如何快速、有效地管理数据权限,确保数据安全。

作为大数据可视化的分析平台,Tableau Server提供了受控的数据访问,支持行级别的权限管理,实现的基本原理是将每位访问者的用户名与数据源的特定字段建立关联关系。

这里使用到了用户函数。

1、大规模受控数据访问的基本原理

大规模受控访问,必须在数据源中具备能与访问者匹配的字段,可以称之为“权限字段”。依据“权限字段”,对访问的用户标识匹配,仅显示匹配的数据明细,从而实现行级别的控制。

常见的“权限字段”为数据源中的用户相关字段,比如“地区经理”、“业务员”等字段。

最重要的两个用户标识是用户名及其归属的群组;如果同时匹配时,可以设置是同时满足还是满足一个即可访问——这里会用到逻辑的判断。

如图所示,假定数据源中有一个字段“地区经理”,分别与各个地区相对应,每个地区下面又可以包含各个城市和城市经理。在tableau Server访问时,我们希望不同的地区经理登录其账号时,只显示对应数据明细所构造的视图——即行级别数据安全管控,简称RLS。

受控的数据库访问

2、大规模受控数据访问的条件和方法

大规模受控访问需要满足几个条件:

  • 数据源中有对应的权限字段
  • Tableau Server有用户的信息

而关键在于如何将二者匹配起来,大规模部署需要自动化实现,此时就需要一个映射的函数。Tableau中提供了多种用户函数,常见有:

  • Usename()
  • FullName()
  • IsUsename()
  • IsFullName()
  • IsMemberOf()
  • UserDomain()

这里最重要的是Usename() 和IsMemberOf()函数。

以超市数据为例,如果希望每个地区经理只看他自己的数据,那么就需要判断用户登录的标识与Tableau Server中用户名的匹配情况。常见的判断是:

USERNAME() = [地区经理]

由于这个判断是布尔,因此会自动创建一个判断的字段,将这个字段加入筛选器,就可基于登录用户对应的用户名,与数据库的字段匹配。

这种情况下,需要确保数据源的名称,和Tableau Server中的用户名对应。

在超市数据中,有6位地区经理,可以在Tableau Server中创建对应的用户。我在Tableau Online中,只能以邮箱为用户名,所以就需要通过计算建立二者之间的映射。为此,我添加了一个case when函数。

 

基于这样的关系,就可以直接使用以下的函数判断,从而实现的受控的访问:

USERNAME()=[地区经理-online]

受控的用户访问

这里实现的是「地区经理」对数据的访问,如何同时对「城市经理」的数据管控呢?

tableau Server没有用户层次的概念,只有用户和群组。对城市的判断和上面对“地区经理”一样,只需要增加一个逻辑判断即可。当然,由于有的人是地区经理,有的人是城市经理,此时就需要做一个二次的判断。比如:

USERNAME()=[地区经理-online]  OR  USERNAME()=[城市经理] 

这样,只需要满足其中之一,即可查看对应的数据。

————————

这种基于username的方法适用于以下情况,需要同时满足:

  • 数据源中有对应的权限字段,比如“地区经理”“省区经理”甚至“城市经理”;
  • Tableau Sever有对应的用户账号,用户名需要与数据源中保持一致,如果不一致的,需要使用case when函数建立映射;
  • 支持对具有层级的字段同时做判断,比如地区、省份、城市,使用逻辑函数的OR判断,满足其中一个即可授权,这样确保可以查看最高层次对应的数据。

 

3、如何使用群组辅助权限管控

上面的方法,是最快的实现数据库数据和Tableau Server账号匹配的方法,可以实现最低的用户与数据之间的关联。

比如数据库中省份经理有34个不同的名称,就可以与Tableau Server中的34个用户对应,实现受控的访问。

但是,如果希望其中的三位省份经理,不仅能看到自己省份,还要查看全国的数据呢?如果是一位分析师,分析师账号不在数据源中,因此username就无法和数据源匹配。比如下图中,Tableau server中的“yl@vizdata.cn”和“wyp@vizdata.cn”分别与数据源中的“殷莲”(华北)、“范彩”(中南)对应;但是另一个用户“yupengwu”是分析师账号,不存在于数据源中。如何授权这三个人能查看所有的数据呢?

3 受控的数据访问-群组

这就需要在基于用户名称的判断基础上,增加另一个判断方法:基于群组的判断。在上图中,在Tableau Server增加一个分析师群组“Creator Group”,增加对应的两位省份的经理,同时还可以增加分析师账号。

基于群组的判断和基于用户的有差异,此前的用户判断,是把登录tableau server的用户名与数据库中“权限字段”(上面是地区经理)匹配,匹配通过的数据保留,不匹配的不予显示,从而实现行级别控制。

而基于群组的判断,则是把登录tableau server的用户名与群组判断,在群组中的,返回true,从而可以查看所有数据。注意这里只是对群组中用户的全部授权,而不会与数据库中的权限字段做匹配。如下图所示,模拟“yl@vizdata.cn”用户登录,判断它是否在Creator Group群组中,结果返回True,因此授权查看所有数据。

基于群组的判断

这种基于群组的方法适用于几种用户:

  • 分析师用户,它们不在数据源中出现,但是有权查看所有数据;
  • 高管账号,它们不在数据源中出现,但是有权查看所有数据。

 

4、几种特殊情况的处理

使用函数的方法,不需要在Tableau Server中设置组织架构,只需要确保数据源中的组织架构及Server用户的匹配就好。

后期有人员调整,也无需反复更改,数据源的数据更改,会自动传导到Tableau server。不过需要确保server中的用户名,及时停用或者设置站点角色权限为“无”,从而避免占用许可证。

 

更多官方介绍参见链接:

 

Apr 30, 2020 苏州 及G222动车