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

一般来说,很少需要修改角色名。而且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 StringIO
import sys
import re

blacklist = ['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.stdout
	sys.stdout = mystdout = StringIO()
	listAppRoleMembers(appStripe="obi",appRoleName= roleName);
	sys.stdout = oldstdout
	app_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 members
	



def listRoles():
	"获取角色列表"
	oldstdout = sys.stdout
	sys.stdout = mystdout = StringIO()
	listAppRoles(appStripe="obi")
	sys.stdout = oldstdout
	app_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.WLST appRoleRename.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,以便让修改生效。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值