Oracle如何查看发起session的客户端ip地址

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

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

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

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

SYS_CONTEXT('USERENV','IP_ADDRESS')

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

192.168.77.1

USERNAME          SID    SERIAL#CLIENT_INFO        CLIENT_IDENTIFIER

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

使用client_identifier字段

USERNAME          SID    SERIAL#CLIENT_INFO        CLIENT_IDENTIFIER

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

使用client_info字段

USERNAME          SID    SERIAL#CLIENT_INFO        CLIENT_IDENTIFIER

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


当然,这个过程过程可以通过一个触发器来调用,当每一个新的用户连接开启的时候自动触发该触发器,将相应的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字段中:

USERNAME          SID    SERIAL#CLIENT_INFO        CLIENT_IDENTIFIER

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

猜你喜欢

转载自www.linuxidc.com/Linux/2016-12/138059.htm