Tableau中的行级数据安全 - 第2部分





5.00/5 (1投票)
Tableau数据库方法中行级数据安全的逐步实现
引言
这是 Tableau 中实现行级数据安全系列的第 2 部分。在上一篇文章中,我解释了如何使用存储在 Tableau Server 组中的安全配置来实现在 Tableau 中的行级数据安全 - 第 1 部分。我建议先阅读上一部分。
在这一部分,我们将实现 Tableau 中的行级数据安全,**使用部分存储在数据库中的安全配置**。
业务需求 - 第 2 部分 - (安全配置部分存储在数据库中)
现在让我们扩展在数据属性级别限制访问的要求。我们有一个名为“字段类别”的数据库字段。由于我们有与损益表相关的数据,因此数据库字段类别列中的数据如下。
- 销售
- 销售成本
- 毛利润
- 分公司直接费用
- GO 直接费用
- 部门营业利润率
- 营业利润率
- 财务费用/收入前的营业利润
- 融资成本/收入
- 财务费用/收入后的营业利润
- 集团间接费用 (管理费)
- 净利润
- GO 直接费用 (HO)
- 集团间接费用
我们有四个不同级别的组织经理访问级别(总裁、直线经理、分公司经理和分公司部门经理),如上文所述。现在,业务希望这些字段类别根据用户的组织经理级别来显示。
基于字段类别的访问控制矩阵包含应显示给每个级别的类别。
上述矩阵的翻译如下:
- 总裁:他应该能够看到所有分公司、所有部门的所有字段类别。
- 直线经理:他应该能够看到所有分公司的他自己的部门,字段类别从销售到营业利润率。
- 分公司经理:他应该能够看到他所在分公司的所有部门,字段类别从销售到净利润。
- 分公司部门经理:他应该能够看到他所在分公司的他自己的部门,字段类别从销售到营业利润率。
解决方案概念
由于此需求是《第 1 部分业务需求》中提到的需求的扩展,我们将使用之前完成的所有工作,例如创建了服务器组,将用户分配给相应的服务器组,然后创建了一个计算字段,该字段用作 Tableau 工作表的过滤器来限制数据。此类配置对于 Tableau 面试和 Tableau 认证非常重要,因此请查看与安全性和更多主题相关的Tableau 认证资料。
现在,我们将按照以下步骤来实现这个增强的需求:
- 在数据库中创建访问级别字段
- 更新用户过滤器
- 测试访问控制
在数据库中创建访问级别字段
由于我们有四个访问控制级别,我们将创建一个长度为 4 的字符字段,每个字符代表允许的访问级别。从数据库中获取的每条记录都将包含这些列的信息。
以下是此字段 XXXX 的格式及其翻译。
此访问级别字段的可能组合如下所示。空单元格表示某个级别无法访问数据。下面的屏幕截图解释了所有组合的访问控制。
我们提供了 Excel 文件中的示例数据,以便更好地理解和澄清。
更新用户过滤器
我们将在用户过滤器计算字段中使用 `ACCESS_LEVEL` 数据库字段来识别允许的访问级别,并据此编写逻辑。
例如,现在我们将通过复制现有的用户过滤器计算字段来修改它,并为总裁级别编写以下逻辑:
我们添加了一个条件来检查数据库字段 `ACCESS_LEVEL` 的第一个字符。如果第一个字符是 'E
' 并且登录用户是 `PRESIDENT` 组的成员,则返回 `1`,否则返回 `0`。
这样,数据将根据用户在服务器组中的成员身份以及记录基于 `ACCESS_LEVEL` 的允许访问级别进行控制。简而言之,借助 `ACCESS_LEVEL` 字段,数据访问将根据字段类别级别进行控制。
一旦我们为所有级别编写了代码,用户过滤器逻辑如下所示:
更新用户过滤器计算字段的代码后,将其应用到过滤器窗格中以过滤数据访问,如下所示:
测试访问控制
应用用户过滤器后,现在是时候验证所有四个级别的逻辑了。
检查总裁的数据访问
用户 Muhammad 是总裁,应该能够看到所有分公司和部门,并且应该能够看到字段类别。为了检查他可访问的数据,让我们选择 Muhammad 用户,如下所示:
从上面的屏幕截图可以清楚地看到,Muhammad 能够看到公司所有分公司和所有部门,并且他还能够看到所有字段类别,即 `ACCESS_LEVEL` 字段中第一个字符为 'E
' 的所有组合都可以被总裁查看。
检查直线经理 - 服务部的数据访问
用户 Wasim 是服务部直线经理,应该能够看到公司所有分公司的服务部门。关于字段类别,直线经理被允许查看从销售到营业利润率的字段类别。
为了检查他可访问的数据,让我们选择 Wasim 用户,如下所示:
从上面的屏幕截图可以清楚地看到,Wasim 能够看到服务部门的所有分公司,并且 `ACCESS_LEVEL` 字段的第二个字符为 'L
' 的所有字段类别都可以被直线经理查看。
检查分公司经理 - 沙迦的数据访问
用户 Jeffry 是沙迦分公司经理,应该能够看到沙迦分公司的所有部门。为了检查他可访问的数据,让我们选择 Jeffry 用户,如下所示:
从上面的屏幕截图可以清楚地看到,Jeffry 能够看到沙迦分公司的所有部门,并且 `ACCESS_LEVEL` 字段的第三个字符为 'B
' 的所有字段类别都可以被分公司经理查看。
检查分公司部门经理 - 沙迦服务部经理的数据访问
用户 Manoj 是沙迦服务部经理,应该只能看到沙迦的服务部门。为了检查他可访问的数据,让我们选择 Manoj 用户,如下所示:
从上面的屏幕截图可以清楚地看到,Manoj 只能看到沙迦分公司的服务部门,并且 `ACCESS_LEVEL` 字段的第四个字符为 'D
' 的所有字段类别都可以被分公司部门经理查看。
结论
我们逐一检查了所有四个级别,发现数据按照 `ACCESS_LEVEL` 数据库字段中的配置进行了查看。
虽然也可以通过使用服务器组来处理这个问题,但可能会更繁琐和有风险,因为任何新字段类别的添加都需要添加新的服务器组,并且在这种情况下需要审查所有 IF 条件。因此,在这种情况下,建议采用混合方法,将更一致的逻辑放在服务器组中,而将可能随时间变化的配置放在数据库级别。
历史
- 2020年6月25日:初始版本