设为首页 加入收藏

TOP

Oracle如何查看发起session的客户端ip地址
2016-12-11 08:15:05 】 浏览:296
Tags:Oracle 如何 查看 发起 session 客户端 地址

上文中我们提到了使用userenv函数或者sys_context函数可以获得当前会话的相关信息,其中就包含的有ip_address这一项


当我们使用client_identifier字段来保存登录会话的ip地址的时候,我们需要用到dbms_session.set_identifier过程/函数


当我们使用client_info字段来保存登陆会话的ip地址的时候,我们需要用到dbms_application_info.set_client_info过程/函数


例:查看当前用户的ip地址:


linuxidc@linux > selectsys_context('userenv','ip_address') from dual;


SYS_CONTEXT('USERENV','IP_ADDRESS')


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


192.168.77.1




linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context('userenv','sid') fromdual);


USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER


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


linuxidc 138 38266


使用client_identifier字段


linuxidc@linux > execdbms_session.set_identifier(sys_context('userenv','ip_address'));


linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context('userenv','sid') from dual);


USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER


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


linuxidc 138 38270 192.168.77.1


使用client_info字段


linuxidc@linux > execdbms_application_info.set_client_info(sys_context('userenv','ip_address'));


linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context('userenv','sid') from dual);


USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER


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


linuxidc 138 38270 192.168.77.1 192.168.77.1




当然,这个过程过程可以通过一个触发器来调用,当每一个新的用户连接开启的时候自动触发该触发器,将相应的ip信息写入v$session的相应字段。


触发器的例子:


create or replace trigger on_login_trigger


after logon on database


begin


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


end;


/


建立这个trigger需要有dba权限,这样的话,当每个用户新登录的时候,这个触发器就会起作用,然后就能够将客户端的ip地址填充到v$session视图中的client_info字段中:


linuxidc@linux > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context('userenv','sid') from dual);


USERNAME SID SERIAL#CLIENT_INFO CLIENT_IDENTIFIER


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


linuxidc 149 425192.168.77.1


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Linux下命令行安装WebLogic 10.3.6 下一篇远程连接MySQL很慢的解决方法

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目