首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

Oracle 創建 DBLink 報 ORA-01017/ORA-02063 密碼大小寫敏感問題解決

     編輯:Oracle 資料庫相關知識

故障現象

環境:Oracle 10.2.0.1 → 11.2.0.3 跨版本 DBLink。
創建:CREATE PUBLIC DATABASE LINK dmz63 CONNECT TO xyy IDENTIFIED BY xyy USING '...';
查詢:SELECT * FROM dual@dmz63; 报错:
ORA-01017: invalid username/password; logon denied
ORA-02063: preceding line from ...

根因分析

  1. 10g/11g 密碼大小寫敏感機制不同:11g 默認啟用 SEC_CASE_SENSITIVE_LOGON=TRUE,密碼區分大小寫。
  2. 10g 客戶端創建 DBLink 時,將密碼**隱式轉為大寫**存儲在數據字典 (SYS.LINK$) 中。
  3. 連接 11g 時發送大寫密碼,11g 按大小寫敏感驗證失敗 (實際密碼為小寫)。

解決方案:雙引號保持大小寫

CREATE PUBLIC DATABASE LINK dmz63
  CONNECT TO xyy IDENTIFIED BY "xyy"   -- 雙引號保持原始大小寫
  USING '(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.0.1)(PORT=2261)))
         (CONNECT_DATA=(SERVICE_NAME=xyy)))';

關鍵點: IDENTIFIED BY "xyy" 雙引號告訴 Oracle「按字面大小寫存儲密碼」,避免 10g 客戶端自動大寫轉換。

驗證與排查步驟

  1. 確認遠端用戶密碼:SELECT username, password FROM dba_users WHERE username='XYY'; (11g 顯示加密值,但可通過 ALTER USER xyy IDENTIFIED BY "xyy" 重置確認)
  2. 檢查 DBLink 定義:SELECT db_link, userid, host FROM dba_db_links;
  3. 測試直連:sqlplus xyy/"xyy"@11g_tns 確認密碼大小寫正確。

最佳實踐建議

  • **統一密碼策略**:跨版本環境建議所有密碼**僅用小寫**或**僅用大寫**,避免大小寫混淆。
  • **使用 11g+ 客戶端創建 DBLink**:避免 10g 客戶端的隱式大寫轉換行為。
  • **啟用密碼驗證函數**:PROFILE 限制密碼複雜度,減少弱密碼風險。
  • **定期輪換 DBLink 密碼**:配合 ALTER DATABASE LINK ... CONNECT TO ... IDENTIFIED BY ... (12c+ 支持)。

相關參數參考

SHOW PARAMETER sec_case_sensitive_logon;
-- TRUE: 區分大小寫 (11g 默認)
-- FALSE: 不區分 (兼容 10g 行為)

-- 12c+ 可顯式指定密碼版本
ALTER USER xyy IDENTIFIED BY "xyy" 
  PASSWORD_VERIFY_FUNCTION verify_fn
  ACCOUNT UNLOCK;  -- 12c+ 支持大小寫敏感密碼版本管理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved