兩大認證模式本質
SYSDBA/SYSOPER 權限屬於資料庫外部認證,允許在資料庫未 OPEN 時連線。Oracle 提供兩種互斥/疊加的外部認證機制:
- OS Authentication:透過作業系統群組成員身分驗證。
- Password File Authentication:透過
$ORACLE_HOME/dbs/orapw 檔案驗證。
關鍵參數交互矩陣
| SQLNET.AUTHENTICATION_SERVICES | REMOTE_LOGIN_PASSWORDFILE | 生效模式 | 適用場景 |
| (NTS) | NONE | 純 OS 認證 | 本地管理、安全網路環境 |
| (NONE) 或註釋 | EXCLUSIVE / SHARED | 純密碼檔認證 | 遠程管理、不安全網路 (TCP/IP) |
| (NTS) | EXCLUSIVE / SHARED | **雙重生效** (OS 優先) | 混合環境、向後相容 |
鐵律:OS 認證優先級高於密碼檔。只要 OS 使用者屬於 ORA_DBA/ORA_OPER 群組並使用 CONNECT / AS SYSDBA,輸入的帳密將被忽略。
OS 認證配置步驟 (Windows/Linux 通用)
- 建立 OS 使用者 (如
oracle)。
- 加入對應群組:
- Windows:
ORA_DBA (SYSDBA)、ORA_OPER (SYSOPER)。
- Linux/Unix:
dba、oper (安裝時自動建立)。
- 設定
REMOTE_LOGIN_PASSWORDFILE=NONE (spfile/pfile)。
sqlnet.ora 加入 SQLNET.AUTHENTICATION_SERVICES=(NTS)。
- 測試:
sqlplus / as sysdba → 成功連線。
密碼檔認證配置步驟
- 建立密碼檔:
orapwd file=$ORACLE_HOME/dbs/orapw password=SysPassword entries=10。
- 設定
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE (單實例專用) 或 SHARED (多實例共享、僅含 SYS)。
- 確保
sqlnet.ora 無 NTS 或註釋掉。
- 建立管理使用者並授權:
CREATE USER dba_user IDENTIFIED BY pwd;
GRANT SYSDBA TO dba_user; -- 自動寫入密碼檔
-- 或 GRANT SYSOPER TO dba_user;
- 查詢密碼檔成員:
SELECT * FROM v$pwfile_users;。
- 遠程連線測試:
sqlplus dba_user/pwd@tns_alias as sysdba。
REMOTE_LOGIN_PASSWORDFILE 三值差異
| 值 | 含義 | 密碼檔內容 | 典型用途 |
| NONE | 不使用密碼檔 | 無 | 純 OS 認證 |
| EXCLUSIVE | 獨佔使用 | SYS + 其他獲授權使用者 | 單實例、需建立管理用戶 |
| SHARED | 多實例共享 | 僅 SYS | 一套密碼檔服務多個 SID (舊版 RAC 常見) |
非管理員 OS 認證 (OPS$)
-- 建立外部認證使用者
CREATE USER ops$user IDENTIFIED EXTERNALLY;
-- OS 使用者 ops$user 登入後
CONN /@db_alias -- 無需帳密,自動映射
- 參數
OS_AUTHENT_PREFIX (預設 OPS$) 決定映射前綴。
- 適用於批次腳本、應用伺服器連線池免密碼部署。
常見問題排查
| 現象 | 原因 | 對策 |
| ORA-01031 insufficient privileges | OS 使用者未加入 ORA_DBA/ORA_OPER | 檢查群組成員、重新登入 OS 會話 |
| 密碼檔認證失敗 ORA-01017 | 密碼檔版本不符 (12c+ 預設區分大小寫)、entries 滿 | 重建密碼檔 orapwd ... force=y、增大 entries |
| v$pwfile_users 為空 | 授權後未重啟實例 (SHARED 模式) | 重啟實例或改用 EXCLUSIVE |
最佳實踐建議
- **生產環境預設啟用密碼檔 (EXCLUSIVE)**,支援 Data Guard、RMAN 遠程備份、Enterprise Manager 管理。
- 本地 DBA 維護可同時保留 OS 認證 (雙重生效),便於
/ as sysdba 快速登入。
- 定期備份
orapw,密碼變更後同步備份。
- 12c+ 啟用
SEC_CASE_SENSITIVE_LOGON=TRUE (預設),密碼區分大小寫。
- 審計需求下,啟用
AUDIT_SYS_OPERATIONS=TRUE 記錄所有 SYS 操作至 OS 審計檔。