簡體   English   中英

Oracle 11g r2 ORA-01017: 無效的用戶名/密碼; 通過 JDBC 驅動程序連接時登錄被拒絕

[英]Oracle 11g r2 ORA-01017: invalid username/password; logon denied when connecting via JDBC driver

我不是 Oracle 專家,也不是數據庫管理員。 但是我們有我們創建的這個 Java 程序,它使用 OCI 驅動程序連接到 Oracle 9i 數據庫(Windows 環境)。

但是當我們遷移到 Oracle 11g r2(Linux 環境)時,我們嘗試運行該工具時出現此錯誤:

ORA-01017: 無效的用戶名/密碼; 登錄被拒絕

我已經嘗試了很多可能的代碼來連接到數據庫(指定主機和端口,而不僅僅是 SID/服務名稱、設置屬性對象、使用 OracleDataSource、從 OCI 驅動程序切換到瘦驅動程序、檢查 REMOTE_LOGIN_PASSWORDFILE 等)但仍然同樣的錯誤。

您認為這是驅動程序的問題嗎? 我們需要在數據庫中配置一些東西嗎? 順便說一下,這些是版本:JDBC => 11.2.0.3.0 Oracle DB => 11.2.0.4.0

另外,如果我指示連接字符串,我無法連接到sqlplus:

sqlplus user@ORCL as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Apr 17 11:27:45 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password: 

ERROR: ORA-01017: invalid username/password; logon denied

但是,我可以在不指示連接字符串的情況下進行連接。 ORACLE_SID 在登錄服務器時設置。

sqlplus user as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Fri Apr 17 11:28:06 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:

Connected to: Oracle Database 11g Enterprise Edition Release
11.2.0.4.0 - 64bit Production

是否缺少我們應該設置的配置? 提前致謝。

這很可能發生,因為數據庫服務器正在為此用戶使用強大的驗證程序,而您的客戶端(sqlplus 或 JDBC)不支持此密碼驗證程序。 您可以升級 sqlplus 和 JDBC 瘦身,也可以讓服務器生成強弱密碼驗證程序,以便舊客戶端仍然可以連接。 為此,請按照以下步驟操作:

在服務器上的 sqlnet.ora 中,將登錄版本設置為 10:

allowed_logon_version=10

並重新生成用戶密碼(重新生成驗證者):

ALTER USER user IDENFIFIED BY "newpassword";

ORA-01017: 無效的用戶名/密碼; 登錄被拒絕

正如其他人所說,此錯誤消息說明了一切。 您尚未指定有效的用戶名/密碼組合。 就這么簡單。 有一些 Oracle 錯誤消息可能不清楚,但這不是其中之一。

在數據庫中指定 Oracle 用戶的用戶名和密碼,您的登錄應該會成功。

只要我以 root 用戶身份連接,我使用的用戶就可以接受任何密碼。

您在登錄到運行數據庫的同一台機器時使用 SQL*Plus,並且您以具有dba組成員身份的用戶身份登錄到 Linux。 在這種情況下,無論您指定什么用戶名或密碼,都可以登錄。 事實上,我只是試着跑

sqlplus blah/blah as sysdba

連接到我的 Oracle 11g XE 數據庫,並且連接正常,盡管我的數據庫沒有blah用戶。

另請注意,如果您以這種方式連接,您將作為 Oracle SYS用戶連接,您可以通過運行查詢select user from dual;來確認這一事實select user from dual; .

請不要假設您可以使用您的操作系統用戶憑據連接到 Oracle。 您也許可以使用您的操作系統用戶名而不使用密碼登錄 SQL*Plus,但這只是因為在您的情況下 SQL*Plus 允許您登錄,而不管您的憑據如何。 Oracle 用戶獨立於 OS 用戶。 僅僅因為您可以使用給定的用戶名和密碼登錄操作系統並不意味着您可以使用相同的憑據登錄 Oracle。

想必您的應用程序連接的 9i 數據庫中有一個 Oracle 用戶? 您的 11g 數據庫中是否存在類似的 Oracle 用戶? 您是否嘗試以該用戶身份連接? 您是否嘗試過重置其密碼? (以SYS alter user username identified by "newpassword";連接,然后輸入alter user username identified by "newpassword"; 。)

一旦您可以使用連接字符串成功登錄到 SQL*Plus,您就可以查看在 JDBC 中使用相同的用戶名、密碼和連接字符串。

我的猜測是您的密碼存在大小寫問題。 oracle 更改了 11g 中密碼的處理方式,現在它們區分大小寫,而在 9i 版本中則不區分大小寫。

可能是以下幫助之一:

  1. 根據數據庫配置檢查並選擇正確的連接字符串樣式:

    來自 ORACLE 瘦風格語法描述

     Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:scott/tiger@//myhost:1521/myservicename");

    與 SID 連接(來自 ORACLE 文檔):

     Connection conn = DriverManager.getConnection ("jdbc:oracle:thin:@myhost:1521:orcl", "scott", "tiger");
  2. 檢查您是否在用戶名中添加了"as sysdba"在此處查看常見問題解答)

  3. 不太可能但可能:檢查您的用戶名和/或密碼是否區分大小寫。 在這種情況下,它們將它們包含在"

您必須在程序中檢查您的數據庫的用戶名和密碼以及連接字符串,更改 CASE 會導致此錯誤

對我來說,我安裝了 oracle 客戶端 11g R2 和 oracle 數據庫 12.2 版本,然后使用客戶端 PC 中 BIN 文件夾下的 NETCA 創建了 tnsnames.ora,然后我將以下幾行添加到數據庫服務器中的文件 SQLNET.ora 中:

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 8
SQLNET.ALLOWED_LOGON_VERSION_SERVER = 8

之后我只能使用系統用戶登錄,當我嘗試使用任何其他用戶登錄時出現錯誤`

ORA-01017: invalid username/password; logon denied`

最后我通過在客戶端 SQL 中從系統用戶更改其他用戶的密碼來解決它。 這就是我解決錯誤的方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM