前置條件
- 作業系統帳號屬於
ORA_DBA (Windows) 或 dba 群組 (Linux/Unix)。
- 環境變數
ORACLE_SID、ORACLE_HOME 正確設定。
標準重置流程
# 1. 免密以 SYSDBA 登入
sqlplus /nolog
SQL> CONN / AS SYSDBA
-- 或直接
sqlplus / AS SYSDBA
# 2. 修改 SYS 密碼 (若 SYS 也忘記)
SQL> ALTER USER SYS IDENTIFIED BY NewSysPass123;
-- 密碼必須以字母開頭,否則 ORA-00988
-- 建議複雜度:大小寫+數字+特殊符號,長度 ≥ 8
# 3. 修改其他用戶密碼
SQL> ALTER USER system IDENTIFIED BY NewSysPass123;
SQL> ALTER USER app_user IDENTIFIED BY NewAppPass456;
# 4. 解鎖帳號 (若被鎖定)
SQL> ALTER USER app_user ACCOUNT UNLOCK;
密碼驗證函數與 Profile 影響
- 若用戶套用
PROFILE 含 PASSWORD_VERIFY_FUNCTION,新密碼必須通過驗證函數檢查(長度、複雜度、歷史重複等)。
- 查詢用戶 Profile:
SELECT profile FROM dba_users WHERE username='APP_USER';
- 查詢驗證函數:
SELECT limit FROM dba_profiles WHERE profile='DEFAULT' AND resource_name='PASSWORD_VERIFY_FUNCTION';
- 臨時停用驗證:
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL; (修改完再恢復)。
常見錯誤與對策
| 錯誤 | 原因 | 對策 |
| ORA-01031: insufficient privileges | 非 SYSDBA / 非 DBA 群組 | 確認 OS 群組、以正確用戶執行 sqlplus |
| ORA-00988: missing or invalid password(s) | 密碼以數字開頭或含非法字符 | 密碼以字母開頭,避免 @ " ' 等特殊字符或用雙引號包裹 |
| ORA-28000: the account is locked | 帳號被鎖定 | ALTER USER ... ACCOUNT UNLOCK; |
| ORA-28001: the password has expired | 密碼過期 | ALTER USER ... IDENTIFIED BY new_pass REPLACE old_pass; 或管理員重置 |
| ORA-01994: GRANT failed: password missing for user | 建立用戶未指定密碼 | CREATE USER ... IDENTIFIED BY ... |
12c/18c/19c 多租戶 (CDB/PDB) 注意事項
-- 連線到 CDB$ROOT
sqlplus / AS SYSDBA
ALTER SESSION SET CONTAINER = CDB$ROOT;
ALTER USER SYS IDENTIFIED BY NewPass CONTAINER=ALL; -- 修改所有容器 SYS 密碼
-- 連線到特定 PDB
ALTER SESSION SET CONTAINER = ORCLPDB1;
ALTER USER app_user IDENTIFIED BY NewPass CONTAINER=CURRENT;
密碼檔管理 (Remote SYSDBA)
- 修改 SYS 密碼後,若使用
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE/SHARED,需重建密碼檔:
orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=NewSysPass123 entries=10 force=y
- Data Guard 環境需同步 Standby 端密碼檔。