文档库 最新最全的文档下载
当前位置:文档库 › AccessManager+SunOne目录服务器用户同步基于windows

AccessManager+SunOne目录服务器用户同步基于windows

由于我们项目写JAVA的同事没空,我就自己研究用自定义函数生成导入删除用户的记事本,以及用bat批处理文件执行导入删除操作。
操作系统:windows 2008
数据库:DB2 V9.1
Cognos版本:cognos7.3
用户管理工具:Access Manager、Sun One Directory Server 5.2
AM配置Sun One的方法我就不多说了,这里只说如何做用户同步,具体操作方法如下:
一、在DB2中创建符合AM导入删除用户格式脚本的自定义函数(COGNOS_USER_ADD()和COGNOS_USER_DELETE())
(1)导入用户的自定义函数:
CREATE FUNCTION NSP2.COGNOS_USER_ADD()
RETURNS TABLE(NAME VARCHAR(250))
SPECIFIC NSP2.COGNOS_USER_ADD
LANGUAGE SQL
NOT DETERMINISTIC
EXTERNAL ACTION
READS SQL DATA
NULL CALL
INHERIT SPECIAL REGISTERS
BEGIN ATOMIC
return
with
a as (select s.ZIPCODE,s.CONTACT,s.SAFECODE,s.SAFENAME
from TBL_CODESAFE s
where s.RECSTS='1'
and s.SAFENAME not like '%(停用)'
and s.CONTACT<>''
and s.ZIPCODE<>'')
select 'AddUser,'||a.CONTACT||chr(13)||chr(10)
||'AddUserToUserClass,'||a.CONTACT||','||a.SAFENAME||chr(13)||chr(10)
||'AddUserBasicSignon,'||a.CONTACT||','||a.ZIPCODE||chr(13)||chr(10)
||'SetUserBasicSignonProperty,'||a.CONTACT||','||a.ZIPCODE||','||'Password,'||a.ZIPCODE as jiaoben
from a
order by a.SAFECODE;
END
;
在SQL中调用上述函数,得到的结果如下(即后面提到的adduser.txt里的内容):
AddUser,用户姓名
AddUserToUserClass,用户姓名,机构(即角色)
AddUserBasicSignon,用户姓名,登录ID
SetUserBasicSignonProperty,用户姓名,登录ID,Password,登录密码

(2)删除用户的自定义函数:
CREATE FUNCTION NSP2.COGNOS_USER_DELETE()
RETURNS TABLE(NAME VARCHAR(200))
SPECIFIC NSP2.COGNOS_USER_DELETE
LANGUAGE SQL
NOT DETERMINISTIC
EXTERNAL ACTION
READS SQL DATA
NULL CALL
INHERIT SPECIAL REGISTERS
BEGIN ATOMIC
return
with
a as (select s.ZIPCODE,s.CONTACT,s.SAFECODE,s.SAFENAME
from TBL_CODESAFE s
where s.RECSTS='1'
and s.SAFENAME not like '%(停用)'
and s.CONTACT<>''
and s.ZIPCODE<>'')
select 'DeleteUser,'||a.CONTACT as jiaoben
from a
order by a.SAFECODE;
END
;
在SQL中调用上述函数,得到的结果如下(即后面提到的deleteuser.txt里的内容):
DeleteUser,用户姓名

二、创建调用上述两个自定义函数的sql文件(adduser.sql和deleteuser.sql)
(1)adduser.sql文件里面的内容如下:
select name from table(COGNOS_USER_ADD()) as a;
(2)deleteuser.sql文件里面的内容如下:
select name from table(COGNOS_USER_DELETE()) as b;

三、创建bat批处理文件(adduser.bat和deleteuser.bat)执行sql文件并生成txt文件
(1)adduser.bat文件里面的内容如下:
db2 connect to nsp2db user nsp2 using 123456
db2 -tvf adduser.sql -z adduser.txt
db2 connect reset
(2)deleteuser.bat文件里面的内容如下:
db2 connect to ns

p2db user nsp2 using 123456
db2 -tvf deleteuser.sql -z deleteuser.txt
db2 connect reset

四、创建bat批处理文件(更新用户.bat)执行先删除后导入用户
更新用户.bat文件里面的内容如下:
"E:/Program Files/Cognos/cer4/bin/AccessAdmMaint" -namespace=default -uid=Administrator -pass=admin123 -filetype=2 -filename=E:\JSHuser/deleteuser.txt
"E:/Program Files/Cognos/cer4/bin/AccessAdmMaint" -namespace=default -uid=Administrator -pass=admin123 -filetype=2 -filename=E:\JSHuser/adduser.txt

补充说明:
1、TBL_CODESAFE是我的用户机构表;
2、nsp2db是我的数据库名称,nsp2是用户名,123456是密码;
3、adduser.txt是导入用户的脚本文件,deleteuser.txt是删除用户的脚本文件;
4、我的名称空间是default,访问名称空间的用户ID和密码分别是Administrator和admin123;
5、JSHuser是一个文件夹,存放adduser.sql、deleteuser.sql、adduser.bat、deleteuser.bat、adduser.txt、deleteuser.txt、更新用户.bat 等所有文件;
6、adduser.bat和deleteuser.bat需要进入db2cmd模式中运行,我同事说到时修改一下环境即可,这点我暂时还不理解,回头再研究一下;
7、把3个bat批处理文件放到任务计划中即可,执行时间之间要有适当的时间间隔,执行顺序为:adduser.bat------更新用户.bat------deleteuser.bat;
我再把导入机构(即角色)的SQL脚本分享一下,一般情况下机构不会变,所以没必要做每天同步更新,但是用户有可能会有新增和减少的情况。
执行以下SQL脚本,把结果集复制到记事本中,再通过AM导入到Sun One即可。

with
a as (SELECT s.SAFECODE,s.SAFENAME,s.SUPERCODE FROM TBL_CODESAFE s where s.SAFELEVEL='1'),
b as (SELECT s.SAFECODE,s.SAFENAME,s.SUPERCODE FROM TBL_CODESAFE s where s.SAFELEVEL='2' and s.RECSTS='1' and s.SAFENAME not like '%(停用)'),
c as (SELECT s.SAFECODE,s.SAFENAME,s.SUPERCODE FROM TBL_CODESAFE s where s.SAFELEVEL='3' and s.RECSTS='1' and s.SAFENAME not like '%(停用)'),
d as (SELECT s.SAFECODE,s.SAFENAME,s.SUPERCODE FROM TBL_CODESAFE s where s.SAFELEVEL='4' and s.RECSTS='1' and s.SAFENAME not like '%(停用)')

select a.SAFECODE as px,'AddUserClass,'||a.SAFENAME||','||'Root User Class' as jiaoben
from a
union all
select a.SAFECODE||b.SAFECODE as px,'AddUserClass,'||b.SAFENAME||','||a.SAFENAME as jiaoben
from a,b
where b.SUPERCODE=a.SAFECODE
union all
select b.SAFECODE||c.SAFECODE as px,'AddUserClass,'||c.SAFENAME||','||b.SAFENAME as jiaoben
from b,c
where c.SUPERCODE=b.SAFECODE
union all
select c.SAFECODE||d.SAFECODE as px,'AddUserClass,'||d.SAFENAME||','||c.SAFENAME as jiaoben
from c,d
where d.SUPERCODE=c.SAFECODE
order by px

相关文档
相关文档 最新文档