Oracle限制连接IP的核心是TCP.VALIDNODE_CHECKING=ON配合TCP.INVITED_NODES白名单,未配置白名单则所有连接(含localhost)被拒;需lsnrctl reload生效,日志仅报TNS-00507,排查易误判为网络问题。
Oracle 限制连接 IP 的核心配置项是 TCP.VALIDNODE_CHECKING
它本身只是开关,不直接写 ip 白名单;真正起作用的是配套的 tcp.invited_nodes 和(可选)tcp.excluded_nodes。开启 tcp.validnode_checking=on 后,oracle 才会检查客户端 ip 是否在允许列表中,否则所有配置都无效。
TCP.VALIDNODE_CHECKING=ON 必须配合 TCP.INVITED_NODES 才生效
单独开开关没用,必须明确列出可信 IP 或网段。常见错误是只改了开关,忘了配白名单,结果所有连接都被拒绝(包括本地 localhost 和 127.0.0.1)。
-
TCP.INVITED_NODES=(192.168.1.10,192.168.1.11,10.0.0.0/24)—— 支持单 IP、主机名、CIDR 网段(Oracle 12cR2+) - 主机名必须能被服务器正向/反向解析,否则会被跳过;建议优先用 IP
- 如果配了
TCP.INVITED_NODES,默认拒绝未列明的所有地址(含localhost),需显式加入localhost或127.0.0.1 - 修改后必须重启监听器:
lsnrctl reload(不是 stop/start),否则不生效
Oracle 版本和平台差异影响配置可用性
不是所有版本都支持 CIDR 写法或 IPv6;老版本(如 11gR1)只认逗号分隔的纯 IP/主机名,且不校验子网掩码。
- Oracle 11gR2 及以后才支持
/24这类 CIDR 表示法 - Windows 平台下,
TCP.VALIDNODE_CHECKING对本地命名(tnsnames.ora中的(ADDRESS=(PROTOCOL=TCP)…))无效,仅对监听器接收的连接生效 - 如果数据库启用了 Oracle Connection Manager(CMAN),IP 检查发生在 CMAN 层,
sqlnet.ora配置需放在 CMAN 主机上 - 使用 SCAN VIP 或 RAC 时,确保邀请列表包含所有可能发起连接的客户端 IP,而不是 SCAN 地址本身
容易被忽略的连带影响:监听器日志和连接行为
一旦启用,所有被拒连接不会进数据库审计日志,只留在监听器日志里($ORACLE_HOME/network/log/listener.log),错误信息固定为:TNS-00507: Contact address failed,后面跟着系统级报错如 Linux Error: 111: Connection refused——这其实是误导,真实原因是 IP 被过滤。
- 被拒连接在监听器日志中通常只有 1–2 行,不记录客户端主机名或用户名,排查时容易误判为网络问题
- 如果应用通过连接池(如 UCP、DBCP)启动大量连接,IP 检查失败会导致连接池初始化卡住或超时,现象像“数据库连不上”,实则策略拦截
- 测试时务必从目标客户端机器执行
tnsping和sqlplus /@tns_alias,不能只在数据库服务器本地测










