在本文中,将探讨如何在Tableau中实现行级数据安全(RLS),特别是当安全配置部分存储在数据库中时。行级数据安全是一种控制用户访问特定数据行的技术。这在需要根据用户的角色或组来限制数据访问权限时非常有用。将通过一个案例来说明如何实现这一点。
假设有一个数据库字段名为“Field Category”,它包含了与损益表相关的数据。有四个不同级别的组织管理者访问级别:总裁、线路经理、分行经理和分行部门经理。业务希望这些字段类别根据用户组织管理者级别来显示。
以下是每个级别应该可见的字段类别的访问控制矩阵:
为了满足这个增强的需求,将采用之前已经完成的工作,例如创建服务器组、将用户分配到相应的服务器组,然后创建一个计算字段作为Tableau工作表中的过滤器来限制数据。
由于有四个访问级别,将在数据库中创建一个长度为4的字符字段,每个字符代表允许的访问级别。数据库中的每条记录都将包含这些列的信息。
以下是这个字段的格式XXXX及其翻译:
XXXX
可能的组合如下:
E---
总裁
-L--
线路经理
--B-
分行经理
---D
分行部门经理
将使用数据库字段ACCESS_LEVEL
在用户过滤器的计算字段中来识别允许的访问级别,并相应地编写逻辑。
例如,现在将修改已经编写的用户过滤器计算字段,通过复制它并为总裁级别编写逻辑,如下所示:
IF FIRST(ACCESS_LEVEL) = 'E' AND [User Group] = 'PRESIDENT' THEN 1 ELSE 0 END
这样,数据将根据用户在服务器组中的成员身份以及记录基于ACCESS_LEVEL
允许的访问级别来控制。简而言之,借助ACCESS_LEVEL
字段,数据访问将根据字段类别级别来控制。
一旦用户过滤器应用,现在就是验证所有四个级别的逻辑的时候了。
检查总裁的数据访问:
用户Muhammad是总裁,应该能够看到所有分支机构和部门,并且应该能够看到字段类别。为了检查他可以访问的数据,让选择用户Muhammad,如下所示:
从上面的截图中可以看出,Muhammad能够看到公司的所有分支机构和所有部门,并且他也能够看到所有字段类别,即ACCESS_LEVEL
字段中第一个字符为'E'的所有组合,总裁都可以查看。
检查线路经理的数据访问:
用户Wasim是服务线路经理,应该能够看到公司所有分支机构的服务部门。关于字段类别,线路经理被允许看到从销售到营业利润的字段类别。为了检查他可以访问的数据,让选择用户Wasim,如下所示:
从上面的截图中可以看出,Wasim能够看到服务部门的所有分支机构,并且所有字段类别,其中ACCESS_LEVEL
字段的第二个字符为'L'的线路经理都可以查看。
检查分行经理的数据访问:
用户Jeffry是Sharjah分行经理,应该能够看到他的Sharjah分行的所有部门。为了检查他可以访问的数据,让选择用户Jeffry,如下所示:
从上面的截图中可以看出,Jeffry能够看到他的Sharjah分行的所有部门,并且所有字段类别,其中ACCESS_LEVEL
字段的第三个字符为'B'的分行经理都可以查看。
检查分行部门经理的数据访问: