您的位置:首页 > 其它

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

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

然后将生成的.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角色的工作。大大减少了权限泄露的风险。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: