維運場景常遇到:需以應用帳號(如 SYSTEM、APPS)登入處理問題,但密碼未知且不可變更(避免影響應用連線)。Oracle 提供密碼值暫存與還原機制,可安全完成「臨時變更 → 操作 → 還原」閉環,無需知道原密碼明文。
ALTER USER ... IDENTIFIED BY VALUESDBA_USERS.PASSWORD 儲存的是密碼雜湊值。語法 ALTER USER u IDENTIFIED BY VALUES 'hash' 可直接將雜湊值寫回,跳過密碼複雜度驗證,實現「無感知還原」。
CONN / AS SYSDBA
SELECT username, password FROM dba_users WHERE username = 'SYSTEM';
-- 例:SYSTEM 2D594E86F93B17A1
ALTER USER system IDENTIFIED BY TempPass123;
CONN system/TempPass123
-- 執行維運作業...
CONN / AS SYSDBA
ALTER USER system IDENTIFIED BY VALUES '2D594E86F93B17A1';
CONN system/原密碼 -- 應成功
CONN system/TempPass123 -- 應失敗 ORA-01017
PASSWORD 欄位為 SHA-1 雜湊,SPARE4 為 PBKDF2 雜湊。11g 相容模式下兩者並存,還原時需同時設定:
ALTER USER system IDENTIFIED BY VALUES 'S:hash1;H:hash2';
PASSWORD_VERIFY_FUNCTION 禁止密碼過期,而非借用現有帳號。AUDIT ALTER USER,所有密碼變更留痕。Oracle 10g+ 支援 ALTER USER app_user GRANT CONNECT THROUGH dba_user;,允許 DBA 以 CONN dba_user[app_user]/dba_pass 代理登入,完全避免密碼變更,審計記錄顯示真實使用者 app_user,強烈建議作為標準做法取代本文技巧。
掌握密碼雜湊暫存還原技巧,配合 Proxy Authentication,能在不違反安全合規的前提下,優雅解決「不知密碼需以特定身分操作」的維運難題。