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

Oracle 11g/12c/19c 安裝後帳號連線失敗完整排查:SCOTT 解鎖、SYSTEM 密碼、權限模型

     編輯:Oracle 資料庫基礎

現象:安裝完成無法登入

ERROR:
ORA-28000: the account is locked
-- 或
ORA-01017: invalid username/password; logon denied

根因分析:11g 之後的安全性變更

版本SCOTT 預設狀態SYSTEM 密碼SYS 密碼
10g 及以前解鎖,密碼 TIGER預設 MANAGER預設 CHANGE_ON_INSTALL
11g+鎖定,密碼過期安裝時自訂安裝時自訂
12c+ (CDB/PDB)PDB 內鎖定CDB$ROOT 與 PDB 各自設定CDB$ROOT 設定

標準解決流程

步驟 1:確認可用的管理帳號

  • 安裝時設定的 SYS/SYSTEM 密碼
  • OS 認證:sqlplus / as sysdba(需 OS dba 群組)

步驟 2:以管理員身分連線

$ sqlplus system/your_install_password
-- 或
$ sqlplus / as sysdba

步驟 3:解鎖 SCOTT 並重設密碼

SQL> ALTER USER scott ACCOUNT UNLOCK;
User altered.

SQL> ALTER USER scott IDENTIFIED BY tiger_new;
User altered.

SQL> GRANT CREATE SESSION TO scott;  -- 確保連線權限
Grant succeeded.

步驟 4:驗證登入

SQL> CONNECT scott/tiger_new
Connected.

12c/18c/19c 多租戶 (CDB/PDB) 特殊處理

容器資料庫架構

CDB$ROOT (容器根)
  ├── PDB$SEED (模板)
  ├── PDB1 (應用 PDB)
  └── PDB2 (應用 PDB)

常見錯誤:連到 CDB$ROOT 卻找不到 PDB 的使用者

-- 錯誤:在 CDB$ROOT 查詢 PDB 使用者
SQL> SELECT username FROM dba_users WHERE username = 'SCOTT';
-- 無結果

-- 正確:切換到 PDB
SQL> ALTER SESSION SET CONTAINER = PDB1;
-- 或連線時指定
$ sqlplus system/password@//host:1521/PDB1

PDB 中解鎖 SCOTT

-- 以 CDB 管理員連線
$ sqlplus sys/password@//host:1521/PDB1 AS SYSDBA

-- 或進入 CDB 後切換
SQL> ALTER SESSION SET CONTAINER = PDB1;
SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger_new;
SQL> GRANT CREATE SESSION TO scott;

其他常見連線失敗原因對照表

錯誤代碼原因解決方案
ORA-12154TNS 別名解析失敗檢查 tnsnames.ora、使用 EZConnect //host:port/service
ORA-12541監聽器未啟動lsnrctl start、檢查防火牆 port 1521
ORA-12514服務未註冊等待 PMON 自動註冊、或 ALTER SYSTEM REGISTER
ORA-01017帳號/密碼錯誤確認大小寫、特殊字元、鎖定狀態
ORA-28001密碼過期ALTER USER ... IDENTIFIED BY newpass
ORA-28002密碼即將過期 (寬限期)儘快變更密碼
ORA-02391超過同時連線限制調整 Profile SESSIONS_PER_USER 或殺掉閒置 Session
ORA-12528監聽器所有處理程序忙碌調整 PROCESSES 參數、檢查連線洩漏

自動化檢查腳本

-- check_accounts.sql
SET LINESIZE 200 PAGESIZE 1000
COL username FOR A30
COL account_status FOR A20
COL profile FOR A20
COL default_tablespace FOR A20

SELECT username, account_status, lock_date, expiry_date, profile, default_tablespace
FROM dba_users
WHERE username IN ('SYS','SYSTEM','SYSMAN','DBSNMP','SCOTT','HR','OE','PM','SH','IX','BI')
ORDER BY username;

-- 12c+ 多租戶:檢查所有 PDB
SET SERVEROUTPUT ON
BEGIN
  FOR p IN (SELECT name, con_id FROM v$pdbs WHERE open_mode = 'READ WRITE') LOOP
    DBMS_OUTPUT.PUT_LINE('=== PDB: ' || p.name || ' ===');
    EXECUTE IMMEDIATE 
      'SELECT username, account_status FROM dba_users 
       WHERE username IN (''SCOTT'',''HR'')' 
      INTO ...; -- 實務用 DBMS_SQL 或反射
  END LOOP;
END;
/

最佳實務:安裝後標準化初始化

  1. 立即修改 SYS/SYSTEM 密碼為強密碼
  2. 建立專屬管理帳號,不直接使用 SYS/SYSTEM
  3. 鎖定/移除不需的範例帳號(SCOTT, HR, OE 等)
  4. 建立應用程式專用帳號,最小權限原則
  5. 設定 Profile 密碼策略(複雜度、壽命、鎖定)
  6. 啟用審計:AUDIT CREATE SESSION, ALTER USER BY ACCESS
  7. 記錄安裝密碼存入密碼管理系統

密碼管理工具建議

  • Oracle Enterprise Manager / Database Express
  • 第三方:HashiCorp Vault, CyberArk, Thycotic
  • 腳本化:Ansible Oracle 模組, Python cx_Oracle
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved