资源描述:
《oracle获取远程客户端ip地址》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、如何获得所有远程Session的客户端IP地址在Oracle数据库中没有直接获取远程session客户端IP地址的方法。但是存在直接获取当前session客户端IP地址的方法。通过在数据库中创建afterlogon触发器,再结合使用 DBMS_APPLICATION_INFO.SET_CLIENT_INFO存储过程,我们可以通过查询v$session来获取所有远程session的客户端IP地址。首先,创建如下触发器:CREATEORREPLACETRIGGERlogin_onAFTERLOGONONDATABASEDECLAREipinfoVARCHAR2(30);B
2、EGINSELECTSYS_CONTEXT('USERENV','IP_ADDRESS')INTOipinfoFROMDUAL;DBMS_APPLICATION_INFO.SET_CLIENT_INFO(ipinfo);END;/然后使用任意的用户远程(TNS)连接到数据库中,然后通过查询以下语句便可查看该session的客户端IP地址:21:03:35system@PROD>connscott/tiger@prodConnected.21:04:05scott@PROD>colsys_context('userenv','sid')fora4021:04:18sco
3、tt@PROD>selectsys_context('userenv','sid')fromdual;SYS_CONTEXT('USERENV','SID')----------------------------------------125用system用户创建一个session连接,在该session中来查询scott用户创建的session的客户端IP地址:21:07:47sys@PROD>colclient_infofora3021:08:04sys@PROD>colCLIENT_IDENTIFIERfora3021:08:17sys@PROD>select
4、username,sid,serial#,client_info,client_identifierfromv$sessionwheresid=125;USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER--------------------------------------------------------------------------------------------------------------SCOTT 125
5、35192.168.8.16021:08:43sys@PROD>selectusername,sid,serial#,client_info,client_identifierfromv$sessionwheresid=18;USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER-----------------------------------------------------------------------------------------------------
6、---------SCOTT 18 17192.168.8.100[oracle@dssadmin]$sqlplusscott/tiger@prodSQL*Plus:Release11.2.0.3.0ProductiononTueMar1921:20:162013Copyright(c)1982,2011,Oracle. Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.3.0-ProductionWiththePartiti
7、oning,OLAP,DataMiningandRealApplicationTestingoptions21:21:18scott@PROD>col sys_context('userenv','sid')fora3021:21:24scott@PROD>selectsys_context('userenv','sid')fromdual;SYS_CONTEXT('USERENV','SID')------------------------------13921:08:59sys@PROD>selectusername,sid,serial#,c