在 Linux/CentOS 環境下,透過修改 $ORACLE_HOME/network/admin/sqlnet.ora 實現監聽器層級的 IP 白名單/黑名單控制,是保護資料庫免受未授權連線的輕量級方案。適用於 Oracle 9i 及以上版本,僅對 TCP 協議生效。
cd $ORACLE_HOME/network/admin
# 若不存在則建立
vi sqlnet.ora
# 啟用節點驗證
TCP.VALIDNODE_CHECKING = YES
# 白名單:允許連線的 IP(支援 CIDR、主機名)
TCP.INVITED_NODES = (192.168.100.252, 192.168.100.253, 10.0.0.0/24)
# 黑名單:明確拒絕的 IP(白名單優先級高於黑名單)
TCP.EXCLUDED_NODES = (192.168.100.222, 192.168.100.232)
lsnrctl stop
lsnrctl start
ORA-12537: TNS:connection closed 或 ORA-12547: TNS:lost contact。INVITED_NODES),採用「預設拒絕」原則,避免 IP 變更導致黑名單失效。protocol.ora。sqlnet.ora 均需配置,SCAN Listener 同樣適用。| 方案 | 優點 | 缺點 |
|---|---|---|
| sqlnet.ora (本文) | 簡單、無額外元件、監聽器層面攔截 | 僅 IP 過濾、需重啟監聽、單點配置 |
| Oracle Connection Manager (CMAN) | 支援防火牆代理、連線多工、存取控制規則豐富、高可用 | 需額外部署維護、配置複雜 |
| Database Vault / VPD | 資料庫層面細粒度權限、上下文感知 | 授權成本高、實施複雜 |
| 防火牆/安全群組 | 網路層隔離、與資料庫無關 | 無法識別應用層邏輯、維護成本高 |
TCP.VALIDNODE_CHECKING=YES、IP 格式正確(無空格、逗號分隔)、監聽器已重啟。$ORACLE_HOME/network/log/listener.log 記錄拒絕連線詳情(TNS-12537)。