sqlnet.ora无法配置“允许所有节点访问”,只能通过设置tcp.validnode_checking=no并删除或注释invited_nodes和excluded_nodes来关闭IP访问控制;必须reload监听器且RAC环境需同步配置。
sqlnet.ora 本身不能“允许所有节点访问”——它只支持显式白名单(tcp.invited_nodes)或黑名单(tcp.excluded_nodes),不支持通配符、网段掩码或“全部放行”语义。所谓“允许所有节点”,其实是关闭 ip 访问控制,而非配置一条“允许全部”的规则。
为什么不能写 tcp.invited_nodes = (<em>)</em> 或 192.168.1.
tcp.invited_nodes = (<em>)</em> 或 192.168.1.
Oracle 明确不支持通配符语法:tcp.invited_nodes 只接受逗号分隔的完整 IPv4/IPv6 地址或可解析主机名(如 192.168.1.100、db-server.local)。写 *、0.0.0.0/0、192.168.1.* 等形式会被监听器完全忽略,且不报错,导致你以为配了但实际没生效。
真正“允许所有节点访问”的唯一方式:关掉检查
这不是“配置允许”,而是**停用访问控制机制**。必须同时满足:
-
tcp.validnode_checking = no(关键!必须设为no) - 删掉或注释掉
tcp.invited_nodes和tcp.excluded_nodes两行(二者不能共存,且只要其中任一存在,tcp.validnode_checking = yes就会自动启用) - 确保没有其他网络设备(如防火墙、负载均衡器)拦截连接
改完后必须执行:lsnrctl reload(单实例)或逐节点 srvctl stop listener && srvctl start listener(RAC),否则旧规则仍生效。
常见误操作:以为注释掉就安全了
仅注释 tcp.invited_nodes 不够。如果 tcp.validnode_checking = yes 仍保留,监听器会默认拒绝所有连接(等效于空白白名单),结果是:tnsping 成功但 sqlplus 报 ORA-12537: TNS:connection closed。
验证是否真正放开:
- 连一次,查监听日志:
tail -f $ORACLE_HOME/network/log/listener.log,确认无REJECTED或Valid node checking is enabled类提示 - 从任意未列入原白名单的 IP 执行
tnsping $TNS_ALIAS+sqlplus user/pass@tns,双通才算生效
注意本地回环和 RAC 环境的隐性依赖
即使你目标是“允许所有节点”,监听器自身启动和自检仍依赖本地地址。若 tcp.validnode_checking = yes 且未把 127.0.0.1、::1、localhost 加入 tcp.invited_nodes,lsnrctl start 会失败或后续 alter system register 失效。
RAC 下更需警惕:sqlnet.ora 必须在所有节点的 $ORACLE_HOME/network/admin/ 下内容一致;只改一个节点,SCAN 监听和本地监听行为分裂,部分连接绕过你的预期控制。
实际要放开访问,不是加规则,而是删规则+关开关。最容易被忽略的,是改完后没 reload 监听器,或者 RAC 环境漏同步文件。


















