重庆思庄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