如何跟踪EBS客户端的IP地址
2013-8-13
Sam.T
Samt007@qq Meterlink参考文档:
How to Track IP Address of the Form Session in Oracle application 11i (文档ID 878931.1)
我用的EBS版本是:R12.0.6
一、确认是否有启用OAM服务管理器:
备注:其实是否有启用OAM服务管理器对利用Form监控EBS客户端的IP地址是完全没关的。
这里放在前面,主要是要利用OAM其中一个Form监控功能,它会自动读取Form对应的进程的(有IP地址信息的)rti文件,并自动将IP地址记录在一个表格里面。方便我们完全不用客制开发的前提下做查询IP地址。下面会有详述。
不多说,开始配置:
查询管理器:OAM Generic Collection Service:XXXX
如果它的状态是无效的,则要启用这个管理器:
二、接着到Form监控工作台查询对应的IP地址。
过几分钟之后,Form的监控信息就有了
(必须要先启用Form监控。在User_Profile_Option_Name = 登录:审计层(Sign-On:Audit Level)有设定,设为“表单”):
这里也有IP地址。
三、对应的后台查询的SQL:
我的查询的是根据登录ID可以查到用户登录的所有的Form的信息,包括IP地址等等。
SELECT L.LOGIN_ID
,L.USER_ID
,L.START_TIME LOGIN_TIME
,NVL(F.START_TIME,NVL(R.START_TIME, L.START_TIME)) FORM_TIME
,USR.USER_NAME
,RSP.RESPONSIBILITY_NAME
,FRM.USER_FORM_NAME
,(SELECT IPADDRESS FROM FND_OAM_FORMS_RTI OFRI
WHERE1=1
AND(TO_CHAR(OFRI.PID)=NVL(SF.PROCESS,SR.PROCESS)
OR NVL(SF.PROCESS,SR.PROCESS)=
CONCAT(CONCAT(TO_CHAR(OFRI.PID),':'),TO_CHAR(OFRI.THREADID)))
AND ROWNUM<=1) IPADDRESS
,R.RESP_APPL_ID
,R.RESPONSIBILITY_ID
,
F.FORM_ID
,F.FORM_APPL_ID
,L.PID
,L.PROCESS_SPID
session如何设置和读取,DECODE(NVL(SF.SID,-999),-999,'RESP_LEVEL','FORM_LEVEL') SESSION_LEVEL
,NVL(F.AUDSID,R.AUDSID)  AUDSID
,NVL(SF.SID,SR.SID)SID
,NVL(SF.SERIAL#,SR.SERIAL#) SERIAL#
,NVL(SF.PROCESS,SR.PROCESS) PROCESS
FROM FND_RESPONSIBILITY_TL RSP
,FND_FORM_TL FRM
,
FND_USER USR
,FND_LOGINS L
,FND_LOGIN_RESP_FORMS F
,GV$SESSION SF
,FND_LOGIN_RESPONSIBILITIES R
,GV$SESSION SR
WHERE1=1
AND L.LOGIN_ID = R.LOGIN_ID(+)
AND R.LOGIN_ID = F.LOGIN_ID(+)
AND R.LOGIN_RESP_ID = F.LOGIN_RESP_ID(+)
AND L.LOGIN_TYPE ='FORM'
AND L.USER_ID = USR.USER_ID
AND R.RESPONSIBILITY_ID = RSP.RESPONSIBILITY_ID(+)
AND R.RESP_APPL_ID = RSP.APPLICATION_ID(+)
AND RSP.LANGUAGE(+)=USERENV('LANG')
AND F.FORM_ID = FRM.FORM_ID(+)
AND F.FORM_APPL_ID = FRM.APPLICATION_ID(+)
AND FRM.LANGUAGE(+)=USERENV('LANG')
AND F.AUDSID = SF.AUDSID(+)
AND R.AUDSID = SR.AUDSID(+)
---
AND L.LOGIN_ID =:P_LOGIN_ID
四、原理探索:
问题:表格FND_LOGIN_RESP_FORMS如何获取IP地址的?
查了很多文档,原来,它是读取Oracle Form服务自动产生的一个rti文件来获取对应的客户端的IP地址。
acle/pls/et1211d9/etrm_pnav.show_object?c_name=FND_OAM_FORMS_RTI&c_owner=APPL SYS&c_type=TABLE
那rti文件在哪里?
1.先要确定EBS的环境变量的配置文件。
登录FTP,然后:
进入:
$APPL_TOP
在这个目录下面,到对应的服务器的EBS环境配置文件。这个文件是自动命名的。命名规则:APPS<SID>_Hostname 如果有多个,可以:cd $INST_TOP。再pwd就会发现对应服务器环境的变量配置文件名称。或者咨询DBA。
接着将文件拉过来本地,然后查询对应的参数。必须这样子做,这个env文件如果修改会导致服务器有问题的!
2.到下面的Form的配置(FORMS_RESTRICT_ENTER_QUERY):
这里反过来说明一个问题,就是,如果表格FND_LOGIN_RESP_FORMS没有IP地址,也是因为这里没配置好的原因。
3.根据配置,可以知道rti文件的目录
这个环境的配置的目录是:/data/prod/inst/apps/PROD_ebs/logs/ora/10.1.2/forms
也可以用cd $FORMS_TRACE_DIR直接到rti文件的目录。
上面用环境变量的路径进去主要目的是为了确认服务器的配置究竟对不对。
这个em后面的数据对应的进程的PROCESS栏位。就是:V$SESSION.process
例如作的Form画面的进程ID是:51773902。
根据它就可以到我的IP地址:
这里你可能会想问:那Form是如何获取IP地址,生成rti文件的呢?
这个我也想知道。我猜测应该是Form在运行的时候,其中的有一个功能(应该是Java程序)会获取客户端的IP地址,并自动生成rti文件。
由于对这部分不熟悉,所以探索只好到这里了。仅仅停留在猜测阶段。
五、必须要注意的问题
备注:
This ways only users who have logged in to applications and are using any forms based application then only you are able to track backwards to their relevant IP Address.
换句话说,如果要用这个办法,确定客户端的IP地址,必须有2个前提:
1 用户必须要登录Form的画面,哪怕是只登录到职责也行(其实职责画面也是一个Form)。假设用户只是用网页来操作数据,那目前没办法监控到客户的IP地址。
2 如果用OAM管理对应的表格来做监控,那登录Form画面的时间最好超过5分钟以上,系统才可以跟踪到对应的客户端的IP地址。
六、后续的开发(监控用户登录对应IP地址的客制开发)
这里有一个需求,想要知道用户每次登录的IP地址。
办法1:监控表格FND_OAM_FORMS_RTI
先建立一个触发器,监控表格FND_OAM_FORMS_RTI。当有新记录塞入的时候,就会自动将对应的信息和用户登录的信息碰。如果有存在登录ID,则将IP地址和登录ID关联起来,存在一个客制的表格里面。就可以达到关联登录用户信息和IP地址的信息的目的。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。