Oracle 特權用戶 (SYSDBA/SYSOPER) 登錄支持兩種驗證:
dba/oper 組的 OS 用戶免密登錄(REMOTE_LOGIN_PASSWORDFILE=NONE)。orapw) 的遠程/本地登錄(EXCLUSIVE 或 SHARED 模式)。密碼文件存儲 SYS/INTERNAL 及授權用戶的雜湊值,位於 $ORACLE_HOME/dbs (Unix) 或 $ORACLE_HOME/database (Windows)。
-- 1. 以 SYSTEM 登錄確認參數
SHOW PARAMETER remote_login_passwordfile;
-- 若非 EXCLUSIVE,需修改
ALTER SYSTEM SET remote_login_passwordfile='EXCLUSIVE' SCOPE=SPFILE;
-- 2. OS 層刪除舊密碼文件並創建新文件
# Unix/Linux
rm $ORACLE_HOME/dbs/orapw$ORACLE_SID
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=NewSysPwd entries=10
# Windows (CMD)
del %ORACLE_HOME%\database\PWD.ORA
orapwd file=%ORACLE_HOME%\database\PWD.ORA password=NewSysPwd entries=10
-- 3. 重啟實例 (因參數 SCOPE=SPFILE)
SHUTDOWN IMMEDIATE; STARTUP;
-- 4. 驗證
sqlplus sys/NewSysPwd@tns_alias as sysdba
# 1. 關閉實例
srvctl stop database -d # RAC
# 或
sqlplus / as sysdba <<< "SHUTDOWN ABORT"
# 2. 啟動實例至 NOMOUNT,關閉密碼文件驗證
# 修改 init.ora/spfile: remote_login_passwordfile=NONE
# 或臨時重命名密碼文件
mv $ORACLE_HOME/dbs/orapw$ORACLE_SID $ORACLE_HOME/dbs/orapw$ORACLE_SID.bak
# 3. 啟動實例
STARTUP
# 4. 重置 SYS 密碼 (此時無需舊密碼)
ALTER USER sys IDENTIFIED BY NewSysPwd;
# 5. 恢復密碼文件驗證
ALTER SYSTEM SET remote_login_passwordfile='EXCLUSIVE' SCOPE=SPFILE;
# 重建密碼文件 (見場景一步驟2)
# 重啟實例
SHUTDOWN IMMEDIATE; STARTUP
| 參數值 | 含義 | 適用場景 |
|---|---|---|
| NONE | 禁用密碼文件,純 OS 驗證 | 單機、高安全要求、無遠程 DBA 需求 |
| EXCLUSIVE | 單實例獨享,可存非 SYS 用戶 | 標準生產環境、Data Guard 主庫、需授權應用管理員 |
| SHARED | 多實例共享,僅識別 SYS | 極少見,不推薦(無法區分實例權限) |
搜索順序:
1. 註冊表/環境變量 ORA_SID_PWFILE → 2. ORA_PWFILE → 3. 默認路徑 $ORACLE_HOME/dbs/orapw。
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE 時,GRANT SYSDBA TO user 才會將用戶寫入密碼文件。REVOKE SYSDBA FROM user 同步刪除密碼文件條目。SELECT * FROM v$pwfile_users;v$pwfile_users 導出用戶 → 關庫 → 刪除舊文件 → orapwd 新建大 ENTRIES 文件 → 重新授權用戶 → 開庫。ORA_SID_PWFILE 或環境變量 → 重啟驗證。REMOTE_LOGIN_PASSWORDFILE=NONE → 刪除文件 → 僅能 OS 驗證登錄。640 oracle:dba,防止非授權讀取雜湊值離線破解。SEC_CASE_SENSITIVE_LOGON=TRUE (11g+) 強制大小寫敏感。密碼文件是 Oracle 特權訪問的「鑰匙櫃」。掌握 orapwd、REMOTE_LOGIN_PASSWORDFILE、GRANT SYSDBA 三者交互邏輯,配合「跳過驗證重置」應急預案,即可從容應對各類密碼遺忘場景。