阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

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

156次阅读
没有评论

共计 2372 个字符,预计需要花费 6 分钟才能阅读完成。

在 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_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

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138059.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2372字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中