BIEE 12c 使用wlst脚本修改角色名

来源:互联网 发布:微积分中d含义,知乎 编辑:程序博客网 时间:2024/05/12 20:18

一般来说,很少需要修改角色名。而且biee角色名不能直接修改,只能采用创建新角色然后对新角色重新授权来间接实现修改角色。

但是这样有一个问题,如果需要修改的角色很多,或者需要授权的地方很多怎么办?

这个时候就只能采用程序的方式的来修改角色名了。

由于biee从11g起就采用了OPSS来管理角色,修改角色名就被分为了两步。

第一步 修改em中的角色名

第二步 修改rpd和catalog中的角色名


第一步 修改em中的角色名

修改em中的角色名,可以采用两种方式,一种是使用wlst脚本,另一种是使用java jmx接口。本文以wlst为例,讲解相关方法。

wlst是weblogic的管理脚本,可以和jython一起使用,能完成复杂的自动化运维操作。

wlst脚本有三种调用方式,分别是交互式、离线式和嵌入式。本文以离线式为例,其他两种方式请参考

 Using the WebLogic Scripting Tool


离线式比较好理解,就是用wlst解释器调用py (Jython)脚本,完成相关操作。

具体方式为:

 $FMW/oracle_common/common/bin/wlst.sh
然后使用execfile调用脚本/home/biee06/appRoleRename.py
wls:/offline> execfile('/home/biee06/appRoleRename.py')


appRoleRename.py示例程序如下:

该程序会用于给所有黑名单之外的角色“添加"前缀

注:先创建新角色,然后复制角色成员,最后删除旧角色;大家可以根据自己的需要来修改下面的程序

from cStringIO import StringIOimport sysimport reblacklist = ['BIAdministrator','BIAuthor','BIConsumer','BISystem']; #角色黑名单,不会修改黑名单中的角色rolelist = [];cux_prefix = 'FBUBI_'  #需要添加的前缀admin_user ='weblogic'admin_password = 'admin123'admin_url = 't3://localhost:8701'def createRole( roleName ):   "创建角色"   createAppRole(appStripe="obi", appRoleName= roleName)    print "角色",roleName,"创建成功"   return;def deleteRole( roleName ):"删除角色"deleteAppRole(appStripe="obi", appRoleName=roleName) ;print "删除角色",roleName,"成功"return;def deleteRoleStartWith( startWith ):"删除以startWith开头的角色"listRoles()tmpList = rolelist[:];for r in tmpList:if r.startswith(startWith):deleteAppRole(appStripe="obi", appRoleName=r) ;print "删除角色",r,"成功"return;def addMembers( roleName,memberDict):"添加成员"grantAppRole(appStripe="obi", appRoleName=roleName, principalClass=memberDict['principalClass'], principalName=memberDict['principalName'], forceValidate="false") print "成员",memberDict['Type'],memberDict['principalName'],"添加成功"return;def getMembers( roleName ):"获取角色成员列表"oldstdout = sys.stdoutsys.stdout = mystdout = StringIO()listAppRoleMembers(appStripe="obi",appRoleName= roleName);sys.stdout = oldstdoutapp_roles=mystdout.getvalue()allLines = app_roles.strip().splitlines()members=[];for line in allLines:matchObj=re.search('Principal Clz Name : ([^,]+), Principal Name : (\w+), Type : (\w+)',line)if matchObj:d = {'principalClass': '', 'principalName': ''};d['principalClass'] = matchObj.group(1)d['principalName'] = matchObj.group(2)d['Type'] = matchObj.group(3)members.append(d)else:print "角色[",roleName,"]没有成员"return membersdef listRoles():"获取角色列表"oldstdout = sys.stdoutsys.stdout = mystdout = StringIO()listAppRoles(appStripe="obi")sys.stdout = oldstdoutapp_roles=mystdout.getvalue()allLines = app_roles.strip().splitlines()for line in allLines:matchObj=re.search('Principal Name : (\w+)',line)if matchObj:   roleName = matchObj.group(1)   if roleName in blacklist:   continue   else:   rolelist.append(roleName)        else:   print "No match!!"return;print 'Connecting...'#======================main=========================================try:    connect(admin_user, admin_password, admin_url)except:    print "Error while trying to connect server, please make sure server is running."print "====遍历角色======="listRoles()if len(rolelist) > 0 :print "一共找到",len(rolelist),"个角色"print "====开始创建角色======="for role in rolelist:   createRole(cux_prefix+role)print "=====开始添加成员======="for role in rolelist:members=getMembers( role )for member in members:if member['Type'] == 'APP_ROLE':member['principalName'] = cux_prefix+member['principalName']addMembers(cux_prefix+role,member)print "=========删除旧角色============="for role in rolelist:deleteRole(role)print "=======操作结束========="disconnect()


除了执行wlst.sh之外,还可以直接使用java weblogic.WLSTappRoleRename.py的方式来调用脚本。但在执行java weblogic.WLST之前需要先设置好CLASSPATH和PATH环境变量。

方法是直接加载如下脚本来完成相关变量的设置:

source  $FMW/Oracle_Home/wlserver/server/bin/setWLSEnv.sh



第二步 修改rpd和catalog中的角色名

可以使用datamodel.sh renameapproles来修改rpd和catalog中的角色名

语法如下:

./datamodel.sh renameapproles -h
usage: renameapproles -T <approlenamelist.json> [-L <plugin list>] -U <cred user> [-P <cred password>] [-SI <service instance>] [-S <host>] [-N <port>] [-SSL]

其中approlenamelist.json是一个json格式的文本,需要我们自己编写,例如

{"Title":"Target Application Roles","App-Roles":[{ "oldname":"app1", "newname":"bi_app1" },{ "oldname":"app2", "newname":"bi_app2" }]}

调用示例:

cd $fmw/user_projects/domains/bi/bitools/bin

./datamodel.sh renameapproles -T approlenamelist.json -U weblogic -P admin123 -SI ssi


最后记得重启一下整个biee,以便让修改生效。


原创粉丝点击