如何查看发起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地址:
MAI@test > selectsys_context('userenv','ip_address') from dual;
SYS_CONTEXT('USERENV','IP_ADDRESS')
-------------------------------------
192.168.77.1

MAI@test > selectusername,sid,serial#,client_info,client_identifier from v$sessionwhere sid=(select sys_context('userenv','sid') fromdual); 
USERNAME             SID     SERIAL#CLIENT_INFO           CLIENT_IDENTIFIER
--------------- ------- ---------- ----------------------------------------
MAI                 138       38266 
使用client_identifier字段
MAI@test > execdbms_session.set_identifier(sys_context('userenv','ip_address'));
MAI@test > 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
--------------- ------- ---------- ----------------------------------------
MAI                 138       38270                       192.168.77.1
使用client_info字段
MAI@test > execdbms_application_info.set_client_info(sys_context('userenv','ip_address'));
MAI@test > 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
--------------- ------- ---------- ----------------------------------------
MAI                 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字段中:
MAI@test > 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
--------------- ------- ---------- ----------------------------------------
MAI                 149         425192.168.77.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

河南骏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值