Oracle 身份認證機制靈活多樣,涵蓋操作系統驗證、密碼文件、數據庫內部驗證及 9i 引入的企業用戶認證。本文系統梳理服務端/客戶端 OS 驗證配置、REMOTE_LOGIN_PASSWORDFILE 三大模式差異、域用戶映射規則,以及 9i 整合 Active Directory 的新特性。
NAMES.DIRECTORY_PATH = (TNSNAMES, ONAMES, HOSTNAME)
SQLNET.AUTHENTICATION_SERVICES = (NTS) -- 僅啟用 OS 驗證,或 (NONE, NTS) 雙模式
NONE:數據庫內部密碼驗證NTS:Windows 原生 OS 驗證 (NTLM/Kerberos)| OS 群組 | Oracle 權限 | 適用場景 | |
|---|---|---|---|
| ORA_DBA | SYSDBA | 單實例,本地/域用戶免密登錄 | |
| ORA_SID_DBA | SYSDBA | 多實例隔離,SID 為實例名 | |
| ORA_OPER | SYSOPER | 啟動/關閉/恢復等運維權限 |
| 模式 | 密碼文件用途 | 非 SYS 用戶授權 SYSDBA/SYSOPER | 適用場景 |
|---|---|---|---|
| NONE (默認) | 不使用密碼文件 | 不支持 | 純 OS 驗證環境 |
| EXCLUSIVE | 單實例專用 | 支持 | 需授權應用管理員 SYSDBA 權限 |
| SHARED | 多實例共享 | 不支持 | RAC/多實例共享密碼文件 |
結論:純 OS 驗證必須設置 NONE;若需遠程 SYSDBA 連接或授權非 SYS 用戶,必須用 EXCLUSIVE 並創建密碼文件 (orapwd)。
DOMAIN\USER、本地用戶 MACHINE\USERCREATE USER "DOMAIN\USER" IDENTIFIED EXTERNALLY;HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME0 添加 AUTH_PREFIX_DOMAIN=FALSE (REG_SZ),配合 OS_AUTHENT_PREFIX="" (默認空,8i 前為 OPS$)。init.ora 設置 REMOTE_OS_AUTHENT=TRUE (默認 FALSE)。
客戶端 OS 驗證由客戶端自身作業系統完成,而非服務器。攻擊者可在任意機器創建同名用戶 (如 ZL\ZYK),即可免密登錄對應 Oracle 用戶 "ZLZYK",服務器無法區分機器名與域名。
生產環境嚴禁開啟 REMOTE_OS_AUTHENT=TRUE,應使用密碼驗證、SSL/TLS 或 9i 企業用戶認證。
HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\HOME 新增/修改 OSAUTH_X509_NAME=TRUE (類型 REG_EXPAND_SZ,默認 FALSE)限制:Windows NT 4.0 域不支持此特性。
| 認證方式 | 安全性 | 管理複雜度 | 推薦場景 |
|---|---|---|---|
| 服務端 OS 驗證 (NTS) | 高 | 低 | DBA 本地運維、單機/可信內網 |
| 密碼文件 (EXCLUSIVE) | 中高 | 中 | 遠程 SYSDBA、應用管理員授權 |
| 客戶端 OS 驗證 | 極低 | 低 | 生產環境禁用 |
| 9i 企業用戶認證 | 最高 (PKI/AD/Kerberos) | 高 | 大型企業、合規要求高、跨庫單點登入 |
選型原則:內網運維首選 NTS,遠程管理用密碼文件,企業級統一身份認證上 9i Enterprise User Security,絕不開啟 REMOTE_OS_AUTHENT。