BIEE 12c使用runcat.sh脚本部署catalog并移除BIConsumer角色

当报表开发好之后,我们会先在源环境将其归档(打包),在归档时会根据需要选择是否保留权限及时间戳。

然后将生成的.catalog文件取消归档(部署)到目标环境。在部署的时候我们可以选择“是否替换"目标环境已有的项目,以及如何处理ACL(权限)


其中各项的含义在此不在赘述。

下面我们只谈一种特定的情况,什么情况呢?

假设在源环境/shared目录下有一个新的子目录叫 "Sales",里面存放了和Sales相关的分析。当开发完成之后,我们会对Sales这个目录进行归档(weblogic帐号),在归档的时候

只选择“保留时间戳”,不保留权限,然后生成Sales.catalog。

之后我们将Sales.catalog部署到目标环境的/shared目录之下,部署时ACL选项为“保留”。

目标环境/shared目录的授权情况为BIAdministrator可以完全控制,BIConsumer为只读。

部署完成之后,/shared/Sales目录及其子项的权限为:BIAdministrator可以完全控制,BIConsumer为只读。

虽然,我们在归档的时候选择的是不保留权限,同时部署的时候ACL为保留。但是仍然会导致Sales目录继承/shared目录的权限。

道理也很简单,正因为catalog目录中没有权限信息,在部署的时候虽然ACL为保留,但是如果部署完之后不分配权限,Sales目录将没有任何人能看到。


另外,为什么将/shared目录设置为BIAdministrator可以完全控制,BIConsumer只读呢?原因也很简单,主要是为了授权的方便。因为所有的人都需要访问/shared目录。

上面的操作完成之后,假设我们需要Sales目录只能被BIAdministrator完全控制,Sales_Manager角色访问。我们得删除 BIConsumer的访问权限并添加Sales_Manager角色的访问权限。如果授权人员忘记删除BIConsumer角色的权限就会导致权限泄露,所有人员都能看到Sales报表!!!


人是靠不住的,有没有办法让程序来自动完成这一系列操作?

当然有,可以使用runcat.sh来完成上述操作。

主要使用到其两个子命令unarchive和setItemPermissions

unarchive用于部署catalog

setItemPermissions用于设置catalog的权限 (注:11g不支持该命令)

大家可以执行./runcat.sh -help来获取所有的子命令,以及执行./runcat.sh -cmd 子命令 -help来获取特定子命令的帮助

runcat.sh位于:$DOMAIN_HOME/bitools/bin/ 目录之下


下面直接给出一个编写好的shell脚本,大家可以直接拿去使用

deployCatalog.sh

#!/bin/sh

# BIEE 12c Catalog Deploy Util
# Author: lianjialuo
# Version: 1.0
# Issuse Date:20170526




DOMAIN_HOME=/home/biee02/oracle/Middleware/Oracle_Home/user_projects/domains/bi
OBIPS_URL=http://bjkjy-bi-devbiee01.bjkjy:8303/analytics-ws/saw.dll
CATALOG_FILE=""
TARGET_FULL_PATH=""
ACCOUNT_LIST="BIConsumer;;BIAuthor"
ACCOUNT_TYPE="approle;;approle"
LOGIN_FILE=user.txt

print_usage()
{
    echo "Usage: $0 -f <catalog file to be deployed> -t <target full path>"
    echo " -f: Specify the catalog file to be deployed. e.g. : sample.catalog "
    echo " -t: Specify the target full path. If the the catalog should be deployed under /shared folder,"
    echo " and after being deployed you get sample sub folder.the full path should be: /shared/sample "
    echo
    echo " please note: the catalog file name may not be same as target sub folder"
    echo " using double quotes if the full path name contains space"
}

if [ $# = 0 ] ; then
   print_usage $0
   exit 1
fi

while getopts "f:t:" opt;
 do
      case $opt in
          f) tempValue=${OPTARG}
             if ! [ -f "$tempValue" ]
             then
                 echo "$tempValue doesn't exists !"
                 print_usage $0
                 exit 1
             else
                CATALOG_FILE=$tempValue
              fi
              ;;
          t) tempValue="${OPTARG}"
             if  [ "$tempValue" = "/shared" ] || [ "$tempValue" = "/shared/" ] ;
             then
                 echo "target location can't be /shared !"
                 print_usage $0
                 exit 1
             fi
             TARGET_FULL_PATH=$tempValue
             ;;
          ?) print_usage $0
             exit 1;;
      esac
done
DATE_N=`date "+%Y-%m-%dT%H:%M:%S"`
log_file=$0_$DATE_N

mkfifo info.fifo
mkfifo error.fifo
#创建管道文件
cat info.fifo | tee -a $log_file.log &
exec 1>info.fifo   
#把执行过程输出到info文件中
cat error.fifo | tee -a $log_file.log &
exec 2>error.fifo 



echo "***************************************************"

echo "*  BIEE 12c Catalog Deploy Util   *"

echo "*  OBIPS URL : $OBIPS_URL         *"

echo "*  Target Full Path : $TARGET_FULL_PATH*"

echo "*  Roles need to be removed : $ACCOUNT_LIST   *"

echo "***************************************************"


echo ************Begin to deploy Catalog*******************

$DOMAIN_HOME/bitools/bin/runcat.sh -cmd unarchive -inputFile $CATALOG_FILE -folder "$(dirname "${TARGET_FULL_PATH%*}")" -acl preserveOnlyGroups -overwrite old -online $OBIPS_URL -credentials $LOGIN_FILE

echo ************Deloyment finished************************


echo ************Begin to remove roles*********************

$DOMAIN_HOME/bitools/bin/runcat.sh -cmd setItemPermissions -setOption removeMentioned -accountName $ACCOUNT_LIST -accountType $ACCOUNT_TYPE -item "$TARGET_FULL_PATH" -recursive true -online $OBIPS_URL -credentials $LOGIN_FILE

echo ************Roles are removed*******************

unlink info.fifo
unlink error.fifo


使用方法,将deployCatalog.sh上传到$DOMAIN_HOME/bitools/bin/之下 (可以是服务器端,也可以是BI Client,需要注意的是12.2.1.2.0的客户端BI Client有问题,必须使用64位jdk以及使用一下启动bat文件才能使用)


然后修改如下配置

DOMAIN_HOME=/home/biee02/oracle/Middleware/Oracle_Home/user_projects/domains/bi   #将其设置为你的DOMAIN_HOME
OBIPS_URL=http://bjkjy-bi-devbiee01.bjkjy:8303/analytics/saw.dll  #将其设置为你的BIEE环境URL
CATALOG_FILE=""
TARGET_FULL_PATH=""
ACCOUNT_LIST="BIConsumer;;BIAuthor"   #需要移除的角色列表,注意用;;分隔
ACCOUNT_TYPE="approle;;approle"       #和上面角色列表一一对应,标明类型
LOGIN_FILE=user.txt                   #需要在deployCatalog.sh同级目录下创建user.txt用于存放biee管理员帐号信息(例如weblogic)

user.txt内容如下:

login=weblogic
pwd=admin123



设置完之后,通用如下语法调用

./deployCatalog.sh -f 需要部署的catalog文件 -t 目标全路径


例如:

./deployCatalog.sh -f Sales.catalog -t "/shared/Sales"

需要注意的是 目标全路径,注意是全路径!你是将Sales.catalog部署到/shared目录之下,之后会得到/shared/Sales目录,所以这里需要写/shard/Sales全路径。

另外,catalog文件的名称不一定等于归档前的文件夹名称(你可以自定义文件名称),所以目标全路径不一定以归档文件名结尾。


如果目标全路径中包含空格,请用双引号将全路径引起来。



至此,我们就用一个sh脚本完成了部署及删除BIConsumer角色的工作。大大减少了权限泄露的风险。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值