BIIEE中利用row-wise变量实现数据权限管理

问题描述

实现BIEE分析报表的数据权限控制

前提条件

  1. 数据权限控制通过BIEE中应用程序角色和公司代码的映射实现,可以控制某个角色能访问哪些公司的数据
  2. 角色和公司代码是多对多的关系

解决方法

因为角色和公司代码是多对多的关系,由一个角色从表中取出的公司代码是多行记录,这时我们用普通变量是不合适的,所以采用row-wise变量来实现对数据权限的控制

创建row-wise变量

  1. 联机打开资料库
  2. 进入管理->变量
  3. 右键点击创建初始化块
  4. 进入初始化块,输入数据初始化块名称
    在这里插入图片描述
  5. 点击编辑数据源. 在这里插入图片描述
  6. 输入获取角色对应公司段的sql,选择连接池
    注意:
  • 获取当前登陆用户的角色的语法是
    ‘VALUEOF(NQ_SESSION.ROLES)’, 别忘了加引号

  • 由于一个用户有多个角色,需要解析角色的字符串

  • 在SELECT 语句中第一列必须是一个字符串,这个字符串就是row-wise变量名,后面用这个字符串引用row-wise变量,第二列是实际的公司代码。例如下面的示例sql中

SELECT 'COMPANY_CODE',
       a.org_code

COMPANY_CODE是row-wise变量名,a.org_code是角色对应的公司代码
-示例sql如下

WITH roles AS
 (
  
  SELECT TRIM(regexp_substr(q.nums,
                             '[^;]+',
                             1,
                             rownum,
                             'i')) role
    FROM (SELECT REPLACE(REPLACE('VALUEOF(NQ_SESSION.ROLES)',
                                  '(',
                                  ''),
                          ')',
                          '') nums
             FROM dual) q
  CONNECT BY rownum <=
             length(q.nums) - length(regexp_replace(q.nums,
                                                    ';',
                                                    '')) + 1)
SELECT 'COMPANY_CODE',
       a.org_code
  FROM (SELECT o.org_code
          FROM bi_sys_role_access     r
         WHERE role_code IN (SELECT ROLE
                               FROM roles)
        UNION ALL
        SELECT 'X'
          FROM dual) a
  1. 点击测试,测试sql是否正确,确认正确后点击确定
  2. 这时回到初始化块界面,点击编辑数据目标
    在这里插入图片描述9. 选择行范围初始化,点击确定
    在这里插入图片描述10. 单击确定按钮保存新建的初始化块
    11 检入所做的更改,注意在给应用角色分配权限前一定要检入更改,并且测试初始化块要有数据(如果因条件限制测试时无结果集,可以适当修改下查询条件,测试时有数据,否则在分配权限用到变量时会出现没有定义变量的错误)

应用程序角色分配权限

  1. 进入管理->身份,点击应用程序角色分页
    在这里插入图片描述

  2. 双击要分配权限的角色

  3. 点击权限按钮
    在这里插入图片描述

  4. 进入数据过滤器分页,点击+

在这里插入图片描述

  1. 选择要添加过滤器的对象,事实表和维表都可以

  2. 点击编辑过滤器按钮,编辑过滤器
    在这里插入图片描述

  3. 过滤器中引用row-wise变量

VALUEOF(NQ_SESSION.COMPANY_CODE)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值