預設帳號密碼對照表(安裝未修改密碼時)
| 帳號 | 預設密碼 | 角色/用途 | 登入模式 | 備註 |
| SYS | CHANGE_ON_INSTALL | 資料庫最高管理員 | SYSDBA / SYSOPER | 不可 NORMAL 登入;核心維護專用 |
| SYSTEM | MANAGER | 第二管理員 | SYSDBA / NORMAL | 不可 SYSOPER 登入;日常管理建議用此帳號 |
| SYSMAN | CHANGE_ON_INSTALL | Enterprise Manager 管理 | NORMAL | OEM Repository 擁有者 |
| SCOTT | TIGER | 範例/教學用戶 | NORMAL | 預設鎖定;需解鎖並修改密碼 |
| DBSNMP | DBSNMP | Management Agent 監控 | SYSDBA / NORMAL | OEM 監控代理專用 |
| CTXSYS | CTXSYS | Oracle Text | NORMAL | |
| MDSYS | MDSYS | Oracle Spatial | NORMAL | |
| ORDSYS | ORDSYS | Oracle interMedia | NORMAL | |
| OUTLN | OUTLN | Plan Stability | NORMAL | |
| OLAPSYS | MANAGER | OLAP Catalog | NORMAL | |
| AQADM | AQADM | Advanced Queuing 管理 | SYSDBA / NORMAL | |
常見情境:忘記密碼、帳號被鎖、無法登入
情境 1:以 SYSDBA 免密登入(OS 認證)
$ sqlplus / as sysdba
-- 或
$ sqlplus /nolog
SQL> CONNECT / AS SYSDBA
前提:OS 用戶屬於 dba 群組(Linux)或 ORA_DBA 群組(Windows)。
情境 2:解鎖並重設 SYSTEM/SYS 密碼
SQL> ALTER USER system ACCOUNT UNLOCK;
SQL> ALTER USER system IDENTIFIED BY new_secure_password;
SQL> ALTER USER sys ACCOUNT UNLOCK;
SQL> ALTER USER sys IDENTIFIED BY new_secure_password;
情境 3:解鎖並啟用 SCOTT 範例帳號
SQL> ALTER USER scott ACCOUNT UNLOCK;
SQL> ALTER USER scott IDENTIFIED BY tiger_new;
SQL> GRANT CREATE SESSION TO scott; -- 確保有連線權限
情境 4:密碼檔案遺失/損壞(SYS 密碼重建)
-- 1. 刪除舊密碼檔
$ rm $ORACLE_HOME/dbs/orapw$ORACLE_SID
-- 2. 重建密碼檔
$ orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=new_sys_password entries=10
-- 3. 確認 remote_login_passwordfile=EXCLUSIVE (spfile)
SQL> ALTER SYSTEM SET remote_login_passwordfile=EXCLUSIVE SCOPE=SPFILE;
-- 重啟實例生效
完整操作腳本:標準化帳號初始化
-- run_as_sysdba.sql
SET SERVEROUTPUT ON
SET VERIFY OFF
-- 1. 解鎖核心管理帳號
BEGIN
FOR u IN (SELECT username FROM dba_users
WHERE username IN ('SYS','SYSTEM','SYSMAN','DBSNMP')
AND account_status != 'OPEN') LOOP
EXECUTE IMMEDIATE 'ALTER USER ' || u.username || ' ACCOUNT UNLOCK';
DBMS_OUTPUT.PUT_LINE('Unlocked: ' || u.username);
END LOOP;
END;
/
-- 2. 重設密碼(生產環境請用強密碼)
ALTER USER system IDENTIFIED BY "Str0ngP@ssw0rd!";
ALTER USER sysman IDENTIFIED BY "Str0ngP@ssw0rd!";
ALTER USER dbsnmp IDENTIFIED BY "Str0ngP@ssw0rd!";
-- 3. 選擇性啟用範例帳號
ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY "Sc0tt_T1ger!";
GRANT CREATE SESSION TO scott;
-- 4. 鎖定不需使用的預設帳號(安全強化)
BEGIN
FOR u IN (SELECT username FROM dba_users
WHERE username IN ('CTXSYS','MDSYS','ORDSYS','OUTLN','OLAPSYS','AQADM')
AND account_status = 'OPEN') LOOP
EXECUTE IMMEDIATE 'ALTER USER ' || u.username || ' ACCOUNT LOCK';
DBMS_OUTPUT.PUT_LINE('Locked (security): ' || u.username);
END LOOP;
END;
/
-- 5. 驗證
SELECT username, account_status, lock_date, expiry_date
FROM dba_users
WHERE username IN ('SYS','SYSTEM','SYSMAN','DBSNMP','SCOTT','CTXSYS','MDSYS')
ORDER BY username;
密碼管理最佳實務
| 原則 | 實作方式 |
| 強制複雜度 | 建立 Profile 綁定 PASSWORD_VERIFY_FUNCTION |
| 定期輪換 | PASSWORD_LIFE_TIME 設定 90-180 天 |
| 歷史記憶 | PASSWORD_REUSE_TIME + PASSWORD_REUSE_MAX |
| 鎖定策略 | FAILED_LOGIN_ATTEMPTS = 5-10 |
| 寬限期 | PASSWORD_GRACE_TIME = 7 天 |
| 審計追蹤 | AUDIT ALTER USER, CREATE USER, DROP USER |
Profile 範例:企業級密碼策略
CREATE PROFILE secure_profile LIMIT
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 90
PASSWORD_REUSE_TIME 365
PASSWORD_REUSE_MAX 10
PASSWORD_LOCK_TIME 1
PASSWORD_GRACE_TIME 7
PASSWORD_VERIFY_FUNCTION verify_complexity; -- 自訂驗證函數
-- 指派給使用者
ALTER USER app_user PROFILE secure_profile;
驗證函數範例
CREATE OR REPLACE FUNCTION verify_complexity(
p_username VARCHAR2, p_password VARCHAR2, p_old_password VARCHAR2
) RETURN BOOLEAN IS
BEGIN
-- 長度至少 8
IF LENGTH(p_password) < 8 THEN
RAISE_APPLICATION_ERROR(-20001, '密碼長度至少 8 字元');
END IF;
-- 包含大小寫、數字、特殊字元
IF NOT REGEXP_LIKE(p_password, '[A-Z]') THEN
RAISE_APPLICATION_ERROR(-20002, '需包含大寫字母');
END IF;
IF NOT REGEXP_LIKE(p_password, '[a-z]') THEN
RAISE_APPLICATION_ERROR(-20003, '需包含小寫字母');
END IF;
IF NOT REGEXP_LIKE(p_password, '[0-9]') THEN
RAISE_APPLICATION_ERROR(-20004, '需包含數字');
END IF;
IF NOT REGEXP_LIKE(p_password, '[!@#$%^&*]') THEN
RAISE_APPLICATION_ERROR(-20005, '需包含特殊字元');
END IF;
-- 不可包含用戶名
IF INSTR(LOWER(p_password), LOWER(p_username)) > 0 THEN
RAISE_APPLICATION_ERROR(-20006, '密碼不可包含用戶名');
END IF;
RETURN TRUE;
END;
/
常見錯誤排解
| 錯誤 | 原因 | 解決 |
ORA-01017: invalid username/password | 密碼錯誤、大小寫、帳號鎖定 | 確認密碼、檢查 DBA_USERS.ACCOUNT_STATUS |
ORA-28000: the account is locked | 帳號被鎖定 | ALTER USER ... ACCOUNT UNLOCK |
ORA-28001: the password has expired | 密碼過期 | 重設密碼或用戶登入時變更 |
ORA-01994: GRANT failed: password missing | IDENTIFIED BY 子句遺漏 | 補上密碼子句 |
ORA-01031: insufficient privileges | 無 ALTER USER 權限 | 以 SYS/SYSTEM/DBA 執行 |
安全檢核表
- [ ] 所有預設帳號已修改密碼或鎖定
- [ ] SYS/SYSTEM 使用強密碼並定期輪換
- [ ] 密碼檔案
orapw 權限 600,擁有者 oracle:dba
- [ ] 啟用密碼驗證函數
- [ ] 審計追蹤已開啟
- [ ] 應用程式使用專屬帳號,不使用 SYS/SYSTEM/SCOTT
- [ ] 定期檢視
DBA_USERS_WITH_DEFPWD 視圖(11g+)