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

Oracle用戶密碼未知時的「克隆」遷移技巧:保持密文不變完成跨庫同步

     編輯:Oracle 資料庫基礎

業務痛點

數據庫遷移/克隆場景:目標庫需創建與源庫密碼完全一致的用戶,但源庫密碼明文未知(應用配置文件加密、人員離職等),且不允許修改密碼(會導致下游應用斷連)。

核心原理

Oracle數據字典DBA_USERS.PASSWORD存儲的是加密密文(10g為DES/AES混合,11g+為SHA-1/SHA-256)。ALTER USER ... IDENTIFIED BY VALUES 'encrypted_hash'語法允許直接導入密文,繞過明文驗證。

操作步驟

1. 源庫查詢密文

SET LONG 100
SELECT username, password
FROM dba_users
WHERE username IN ('JW_PUB1', 'PORTAL');

輸出示例:

USERNAMEPASSWORD
JW_PUB11141B75987409AA1
PORTALA9B80747F4D3AF98

2. 目標庫按密文創建/修改用戶

-- 若用戶不存在
CREATE USER jw_pub1 IDENTIFIED BY VALUES '1141B75987409AA1';
CREATE USER portal  IDENTIFIED BY VALUES 'A9B80747F4D3AF98';

-- 若用戶已存在(需先解鎖)
ALTER USER jw_pub1 IDENTIFIED BY VALUES '1141B75987409AA1' ACCOUNT UNLOCK;
ALTER USER portal  IDENTIFIED BY VALUES 'A9B80747F4D3AF98' ACCOUNT UNLOCK;

3. 驗證

-- 使用應用原有連接串測試
sqlplus jw_pub1/original_password@target_db
-- 或由應用中間件發起連接測試

版本兼容性說明

源版本目標版本可行性備註
10g10g/11g/12c/19c✅ 完全兼容密文格式相同
11g11g/12c/19c✅ 完全兼容11g引入區分大小寫密文
12c/19c12c/19c✅ 兼容支援SHA-256/PBKDF2
11g+10g❌ 不可行低版本無法解析高版本密文

進階場景:Data Pump遷移用戶含密文

-- 導出僅用戶定義(含密文)
expdp system/xxx DIRECTORY=dp_dir DUMPFILE=users.dmp \
  SCHEMAS=jw_pub1,portal INCLUDE=USER

-- 導入時自動保留密文
impdp system/xxx DIRECTORY=dp_dir DUMPFILE=users.dmp \
  SCHEMAS=jw_pub1,portal

注意:INCLUDE=USER導出的CREATE USER語句已包含IDENTIFIED BY VALUES子句,導入無需額外操作。

安全合規提醒

  • 密文雖非明文,但屬於敏感憑證,傳輸過程需加密(SCP/SFTP/加密壓縮包)。
  • 導出文件.dmp或查詢結果勿留存於非受控環境,用完即銷毀。
  • 審計要求:記錄操作人、時間、涉及用戶,納入變更管理流程。

總結

IDENTIFIED BY VALUES是DBA在「不知明文、不可改密、必須同步」三約束下的殺手鐧。配合Data PumpINCLUDE=USER,可實現百萬用戶級的無感密碼遷移。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved