重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛
标题:
sqlnet.ora 全景指南让 Oracle 网络“既连得上,又固若金汤”
[打印本页]
作者:
mahan
时间:
2026-1-4 20:06
标题:
sqlnet.ora 全景指南让 Oracle 网络“既连得上,又固若金汤”
sqlnet.ora 是 Oracle 网络子系统的“总闸门”。
它体积很小,却同时扮演“翻译官、安检员、交通警察、加密专家”四种角色;
搞懂它,就能让数据库“既连得上,又断不了,既快的飞起,又固若金汤”。
本文用“一张图、两条链、三类场景、四个文件、五组参数”把 sqlnet.ora 的底层逻辑与全部配置一次性讲透,并给出 11g/12c/19c 通用模板,可直接复制落地。
一、sqlnet.ora 在 Oracle 网络栈里的坐标
(一张图)
┌--------------------┐
│ Client App / JDBC │ ←—— 应用层
├--------------------┤
│ Oracle Net Client │ ←—— 客户端网络层(读 CLIENT 侧 sqlnet.ora)
├--------------------┤
│ Oracle Net Server │ ←—— 服务端网络层(读 SERVER 侧 sqlnet.ora)
├--------------------┤
│ Listener / Dispatcher │ ←—— 端口 1521
├--------------------┤
│ Oracle Instance │ ←—— 数据库层
└--------------------┘
sqlnet.ora 被“同时”读取:
客户端进程(sqlplus、JDBC OCI、expdp)在启动瞬间加载 CLIENT_HOME/network/admin/sqlnet.ora;
监听进程(tnslsnr)和后台进程(dedicated/server)在启动瞬间加载 ORACLE_HOME/network/admin/sqlnet.ora;
如果文件不存在,Oracle 用硬编码缺省值,不会报错——这是很多人“从没配过也能连”的原因。
二、两条“参数链”决定连接生死
(记住链,比死记参数快 10 倍)
名称解析链(Name Lookup Chain)
NAMES.DIRECTORY_PATH = (LDAP, TNSNAMES, EZCONNECT, HOSTNAME)
客户端按顺序“问路”,谁第一个答出来就用谁;全链失败才报 ORA-12154。
安全协商链(Security Handshake Chain)
加密:ENCRYPTION_CLIENT / SERVER → 类型 → 是否强制
校验:CRYPTO_CHECKSUM_CLIENT / SERVER → 类型 → 是否强制
认证:AUTHENTICATION_SERVICES → (NONE | NTS | KERBEROS | RADIUS | TCPS)
任何一环不兼容 → ORA-12650/12660/12638 全家桶。
三、三类典型场景与“最小可用模板”
(复制即可用,已测 11g/12c/19c)
场景 1 开发机快速连(无加密,无 LDAP,纯 TCP)
———— 客户端 sqlnet.ora ————
开发专用,最简
SQLNET.AUTHENTICATION_SERVICES = (NONE)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
场景 2 生产库强制加密 + 防窃听 + 防篡改
———— 服务端 sqlnet.ora ————
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
可选:拒绝低版本
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 12a
———— 客户端 sqlnet.ora ————
SQLNET.ENCRYPTION_CLIENT = REQUIRED
SQLNET.ENCRYPTION_TYPES_CLIENT = (AES256, AES192)
SQLNET.CRYPTO_CHECKSUM_CLIENT = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_CLIENT = (SHA256)
场景 3 只允许已知 IP 访问(白名单)
———— 服务端 sqlnet.ora ————
TCP.VALIDNODE_CHECKING = YES
TCP.INVITED_NODES = (10.2.0.19, 10.2.0.20, backup-scan)
TCP.EXCLUDED_NODES = ()
改完 lsnrctl reload 立即生效;已存在连接不断,新连接按名单过滤。
四、四个“邻居文件”别搞混
文件 作用域 被谁读
sqlnet.ora 全局网络行为 客户端进程 + 监听 + 后台进程
tnsnames.ora 别名解析 客户端
listener.ora 监听端口/协议 监听进程
ldap.ora LDAP 目录解析 客户端(仅当 NAMES.DIRECTORY_PATH 含 LDAP)
五、五组高频参数与值域速查表
(官方 19c 共 157 个,掌握以下 20 个解决 95% 问题)
名称解析
NAMES.DEFAULT_DOMAIN 默认域名,省得写 .WORLD
NAMES.DIRECTORY_PATH 查找顺序,LDAP/TNSNAMES/EZCONNECT/HOSTNAME
加密与校验
SQLNET.ENCRYPTION_xxx ACCEPTED / REJECTED / REQUESTED / REQUIRED
SQLNET.ENCRYPTION_TYPES_xxx (AES256, AES192, AES128, 3DES168, RC4_256…)
SQLNET.CRYPTO_CHECKSUM_xxx 同上四值
SQLNET.CRYPTO_CHECKSUM_TYPES_xxx (SHA256, SHA1, MD5)
认证
SQLNET.AUTHENTICATION_SERVICES (NONE, NTS, KERBEROS, RADIUS, TCPS)
NONE = 纯口令;NTS = 仅 Windows Local/AD 认证;TCPS = SSL 证书。
连接生命周期
SQLNET.INBOUND_CONNECT_TIMEOUT 三次握手超时(秒)
SQLNET.SEND_TIMEOUT / RECV_TIMEOUT 读写超时(11gR2 起)
SQLNET.EXPIRE_TIME 探活包间隔(分钟),防防火墙静默断链
SQLNET.RECV_BUF_SIZE / SEND_BUF_SIZE 缓冲区,提速 LAN 传输
访问控制(仅服务端)
TCP.VALIDNODE_CHECKING
TCP.INVITED_NODES
TCP.EXCLUDED_NODES
(支持主机名、CIDR、通配符,19c 起支持 IPv6)
六、排错“三板斧”
看路径
Windows: where sqlnet.ora
Linux: strace -e trace=file sqlplus … | grep sqlnet.ora
确认读到的是“你以为”的那一份。
看协商
服务端 alert/log 或客户端 trace(设置
SQLNET.CLIENT_INFORMATION = TRUE
SQLNET.CLIENT_LOG_FILE / LEVEL = 16)
会打印加密套件、校验算法、认证方法,一眼可知谁拒绝谁。
看白名单
lsnrctl status 只显示 “Instance blocked” 或 “Instance allowed”;
若连接瞬间挂 ORA-12537 → 99% 被 VALIDNODE 踢掉。
七、11g→19c 演进注意点
加密算法:11g 默认把 RC4_256 放首位,已被业界废弃;19c 默认 AES256。
LOGON_VERSION:11g 缺省 11,12c 起建议 12a,否则老客户端会 ORA-28040。
WALLET 位置:12c 起推荐把 SSL 证书放 WALLET,sqlnet.ora 只写
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = TRUE
路径挪进 ORACLEBASE/admin/ ORACLE_SID/wallet,避免重装丢失。
八、一张“万能对照表”压箱底
(直接打印贴工位)
需求 改哪侧 关键参数
“远程连不上,本机 sysdba 可以” 服务端 AUTHENTICATION_SERVICES=NONE
“抓包怕泄密” 双向 ENCRYPTION_xxx=REQUIRED
“防火墙 1 小时断” 服务端 EXPIRE_TIME=10
“只让办公网段连” 服务端 TCP.VALIDNODE_CHECKING=YES
“不想配 tnsnames” 客户端 NAMES.DIRECTORY_PATH=EZCONNECT
“LDAP 集中解析” 客户端 NAMES.DIRECTORY_PATH=(LDAP,TNSNAMES)
“SSL 证书双向认证” 双向 AUTHENTICATION_SERVICES=(TCPS) + WALLET
结语
sqlnet.ora 没有“最佳实践”,只有“最适合当前业务风险等级的最小集合”。
先画连接路径 → 选场景模板 → 按五组参数微调 → 用三板斧验证,
你就能在“能连、不断、快、安全”四条轨道之间自由切换,
而不再靠“网上抄一段,不通再换一段”的玄学打法。
欢迎光临 重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛 (http://bbs.cqsztech.com/)
Powered by Discuz! X3.2