Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选

首页 / 数据库 / MySQL / Oracle如何查看发起session的客户端ip地址

在Oracle中的v$session视图中可以保存有会话的想关信息,包括了客户端的大部分连接信息。其中我们可以将会话的发起ip地址写入到client_identifier和client_info上文中我们提到了使用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_triggerafter logon on databasebegindbms_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更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址