设为首页 加入收藏

TOP

由查找sessionIP展开---函数、触发器、包(一)
2014-11-24 01:08:35 来源: 作者: 【 】 浏览:28
Tags:查找 sessionIP 展开 --- 函数 触发器

由查找session IP 展开---函数、触发器、包

一、userenv函数、sys_context函数

--查看当前客户端会话的session IP信息

SQL>select sys_context('userenv','ip_address') from dual;

SYS_CONTEXT('USERENV','IP_ADDRESS')

--------------------------------------------------------------------------------

192.168.56.117

展开:可以通过userenv函数或者sys_context函数可以获得当前会话的信息

SQL>SELECT USERENV('LANGUAGE') FROM DUAL;

USERENV('LANGUAGE')

----------------------------------------------------

AMERICAN_AMERICA.ZHS16GBK

--使用参数列举

--ISDBA:返回当前用户是否是dba,如果是则返回true

--SESSION:返回当前会话的标志

--EXTRYID:返回会话入口标志

--INSTANCE:返回当前instance的标志

--LANGUAGE:返回当前环境语言变量

--LANG:返回当前环境的语言缩写

--TERMINAL:返回用户的终端或机器的标志

SQL>SELECT SYS_CONTEXT('USERENV','LANGUAGE') FROM DUAL;

SYS_CONTEXT('USERENV','LANGUAGE')

------------------------------------------------------------------------------------------------

AMERICAN_AMERICA.ZHS16GBK

SQL>select sys_context('userenv','host') from dual;

SYS_CONTEXT('USERENV','HOST')

--------------------------------------------------------------------------------

WORKGROUP\FPA4GFVZXULBFCR

二、v$session视图中

通过v$session视图,将客户端IP信息存入client_identifier字段或client_info字段

使用client_info字段

SQL>execdbms_application_info.set_client_info(sys_context('userenv','ip_address'));

SQL>select username,sid,serial#,client_info,client_identifier from v$session wheresid=(select sys_context('userenv','sid') from dual);

使用client_identifier字段

SQL>exec dbms_session.set_identifier(sys_context('userenv','ip_address'));

SQL>select username,sid,serial#,client_info,client_identifier from v$session wheresid=(select sys_context('userenv','sid') from dual);

范例截图如下:

\

三、触发器

通过触发器调用,新的客户端连接开启时自动触发,将IP信息写入client_info字段

create or replace triggeron_login_trigger

after logon on database

begin

dbms_application_info.set_client_info(sys_context('USERENV','IP_ADDRESS'));

end;

/

通过触发器调用,新的客户端连接开启时自动触发,将IP信息写入client_identifier字段

create or replace triggeron_login_trigger

after logon on database

begin

dbms_session.set_identifier(sys_context('userenv','ip_address'));

end;

/

四、使用UTL_INADDR Package

在没有触发器记录的前提下,通过UTL_INADDR Package来实现获取SESSION IP,而且可以获取其它SESSION IP。

通过说明UTL_INADDR Package的工作原理,体现出UTL_INADDR Package是如何实现的。

实验分析开始:

[root@org54~]# ps -ef |grep sql

oracle 2740 2707 0 21:17 pts/1 00:00:00 sqlplus

oracle 3479 3451 0 21:49 pts/2 00:00:00 sqlplus

root 3482 3375 0 21:49 pts/3 00:00:00 grep sql

[root@org54~]# su - oracle

[oracle@org54~]$ ps -ef |grep LO

oracle 2770 2740 0 21:18 00:00:00 oraclemetro (DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle 3480 3479 0 21:49 00:00:00 oraclemetro(DESCRIPTION=(LOCAL=YES)(ADDRESS=(PROTOCOL=beq)))

oracle 3520 3488 0 21:50 pts/3 00:00:00 grep LO

补充:安装strace工具,跟踪进程执行时的系统调用和所接收的信号。

——引用自网络,strace注解:在Linux世界,进程不能直接访问硬件设备,当进程需要访问硬件设备(比如读取磁盘文件,接收网络数据等等)时,必须由用户态模式切换至内核态模式,通过系统调用访问硬件设备。strace可以跟踪到一个进程产生的系统调用,包括参数,返回值,执行消耗的时间。

——引用结束。

[root@org54RHEL_5.5 x86_64 DVD]# cd Server/ --使用linux光盘安装工具

[root@org54Server]# ls -ll |grep strace

-r--r--r-- 326root root 175066 Jan 18 2010 strace-4.5.18-5.el5_4.1.i386.rpm

[root@org54Server]# rpm -ivh strace-4.5.18-5.el5_4.1.i386.rpm

warning:strace-4.5.18-5.el5_4.1.i386.rpm: Header V3 DSA signature: NOKEY, key ID37017186

P

首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇一:redis的string类型相关操作 下一篇SQLite缓存机制解析

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: