首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 資料庫基礎

Oracle 預設帳號密碼完整對照表與帳號解鎖實戰指南

     編輯:Oracle 資料庫基礎

預設帳號密碼對照表(安裝未修改密碼時)

帳號預設密碼角色/用途登入模式備註
SYSCHANGE_ON_INSTALL資料庫最高管理員SYSDBA / SYSOPER不可 NORMAL 登入;核心維護專用
SYSTEMMANAGER第二管理員SYSDBA / NORMAL不可 SYSOPER 登入;日常管理建議用此帳號
SYSMANCHANGE_ON_INSTALLEnterprise Manager 管理NORMALOEM Repository 擁有者
SCOTTTIGER範例/教學用戶NORMAL預設鎖定;需解鎖並修改密碼
DBSNMPDBSNMPManagement Agent 監控SYSDBA / NORMALOEM 監控代理專用
CTXSYSCTXSYSOracle TextNORMAL
MDSYSMDSYSOracle SpatialNORMAL
ORDSYSORDSYSOracle interMediaNORMAL
OUTLNOUTLNPlan StabilityNORMAL
OLAPSYSMANAGEROLAP CatalogNORMAL
AQADMAQADMAdvanced 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 missingIDENTIFIED BY 子句遺漏補上密碼子句
ORA-01031: insufficient privileges無 ALTER USER 權限以 SYS/SYSTEM/DBA 執行

安全檢核表

  • [ ] 所有預設帳號已修改密碼或鎖定
  • [ ] SYS/SYSTEM 使用強密碼並定期輪換
  • [ ] 密碼檔案 orapw 權限 600,擁有者 oracle:dba
  • [ ] 啟用密碼驗證函數
  • [ ] 審計追蹤已開啟
  • [ ] 應用程式使用專屬帳號,不使用 SYS/SYSTEM/SCOTT
  • [ ] 定期檢視 DBA_USERS_WITH_DEFPWD 視圖(11g+)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved