前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >SYS_CONTEXT函数返回IP地址的一些误解

SYS_CONTEXT函数返回IP地址的一些误解

作者头像
bisal
发布2019-01-29 16:03:45
1.1K0
发布2019-01-29 16:03:45
举报
文章被收录于专栏:bisal的个人杂货铺

上次分享中曾使用了SYS_CONTEXT函数获取ip地址,但返回值为空,当时认为其是返回ipv6的地址,所以为空,但其实这是错误的结论。虽然是一个小小的知识点,但从中可以看出Oracle对于这种内置函数的考虑非常周到,我们先看如下是返回空的ip地址的一个示例,

这里写图片描述
这里写图片描述

我们首先看看SYS_CONTEXT函数的定义,

这里写图片描述
这里写图片描述

这个函数有两个入参,第一个值是命名空间,取值可以是“USERENV”或“SYS_SESSION_ROLES”,第二个值是一些列属性,例如我们使用的IP_ADDRESS,

这里写图片描述
这里写图片描述

含义是,

IP address of the machine from which the client is connected. If the client and server are on the same machine and the connection uses IPv6 addressing, then ::1 is returned.

返回的是客户端连接的机器IP,如果客户端和服务器是同机,则连接会使用IPv6地址,::1会返回。

MOS这篇文章说明了这个问题,

SYS_CONTEXT(‘USERENV’, ‘IP_ADDRESS’) Function Returns A Null Value (文档ID 470504.1)

主要意思就是如果客户端没用使用TCP协议(也就是使用tnsnames.ora定义的连接串)连接,不会返回IP地址,

IP address is not available if client is not connecting through TCP (@SID).

可以看出使用了@SID,则返回了本机IP地址,

这里写图片描述
这里写图片描述

和SYS_CONTEXT函数有联系的还有这两篇文章,

SYS_CONTEXT (‘USERENV’, ‘IP_ADDRESS’) Returns Hostname Rather Than Client IP (文档 ID 1267855.1)

若使用了11.2.0.x的监听器访问10.2.0.4,则返回的是主机名,不是IP地址。解决方案就是,

1) Use IP address and not hostname in the Oracle 11 listener address. 2) When using a hostname contain the listen protocol address by using (IP=FIRST), (IP=V4_ONLY) or (IP=V6_ONLY). Working listener address examples: (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)(IP=FIRST)) (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521)(IP=V4_ONLY)) (ADDRESS = (PROTOCOL = TCP)(HOST = IP_address)(PORT = 1521))

另一篇文章是,

SYS_CONTEXT(‘USERENV’,’IP_ADDRESS’) Doesn’T Return Ipv4 Address When Ipv6 is Enabled (文档 ID 1175504.1)

使用11.1.0.7的监听器查询的时候,例如IPv4是10.16.120.165,则返回是”::ffff:10.16.120.165”,原因就是11.1版本不支持IPv6,无法做转换,解决方案是,

1) Disable IPV6 at OS level 2) Upgrade the database from 11.1.0.7.0 to 11.2.0.1.0

总结: Oracle中几乎所有细节,其实都有可能蕴含着一些特殊含义或用法,足以见其设计的精妙,唯有持续积累,才能收获更多。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年03月28日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档