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角色的工作。大大減少了權限泄露的風險。


發佈了112 篇原創文章 · 獲贊 18 · 訪問量 32萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章