2015-04-17 141 views
0

我不是Oracle专家,也不是数据库管理员。但是我们有这个我们创建的Java程序,它使用OCI驱动程序连接到Oracle 9i数据库(Windows环境)。Oracle 11g r2 ORA-01017:无效的用户名/密码;通过JDBC驱动程序连接时登录被拒绝

ORA-01017:

但是,当我们迁移到Oracle 11g R2(Linux环境),我们当我们试图运行该工具得到这个错误无效的用户名/密码;登录否认

我已经尝试了很多可能的代码连接到数据库(指定的,而不是仅仅SID /服务名称主机和端口,设置属性对象,使用OracleDataSource,从OCI驱动程序切换到瘦驱动程序,检查REMOTE_LOGIN_PASSWORDFILE等)但仍然是相同的错误。

您是否认为这是一个驱动程序问题?我们是否需要在数据库中配置一些东西? 顺便说一句,这些都是版本: JDBC => 11.2.0.3.0 Oracle数据库=> 11.2.0.4.0

另外,我无法连接到在sqlplus,如果我表示连接字符串:

sqlplus [email protected] 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 

是否存在我们应该设置的缺失配置? 在此先感谢。

+0

ORA-01017:无效的用户名/密码;登录被拒绝说这一切 –

+0

它说,ü用户名/密码是错误的...... chekc与你的数据库团队的正确凭据 – theDbGuy

+0

@theDbGuy密码不能错,因为我使用的是一个虚拟用户,可以接受任何密码,只要我以root用户身份连接。 – annaleighsue

回答

0

我的猜测是你的密码有问题。 oracle更改了密码在11g中的处理方式,现在它们在9i版本中是不区分大小写的。

+0

我正在使用接受任何密码的用户,只要我以root用户身份连接即可。这并不能解释为什么我可以连接而不指定连接字符串 – annaleighsue

2

ORA-01017:无效的用户名/密码;登录被拒绝

正如其他人所说,这个错误消息说明了一切。您尚未指定有效的用户名/密码组合。就这么简单。有一些Oracle错误消息可能不清楚,但这不是其中之一。

在数据库中指定Oracle用户的用户名和密码,并且登录应该成功。

我正在使用接受任何密码的用户,只要我以root用户身份连接即可。

你使用SQL * Plus同时登录到作为数据库运行在同一台机器,并且是在向Linux记录为具有dba组成员的用户。在这种情况下,无论您指定什么用户名或密码,都可以登录。其实,我只是试图运行

sqlplus blah/blah as sysdba 

连接到我的Oracle 11g XE数据库,而这个连接的很好,尽管我的数据库没有blah用户的事实。

还请注意,如果以这种方式连接,则将以Oracle SYS用户身份连接,您可以通过运行查询select user from dual;来确认该事实。

请不要认为您可以使用您的操作系统用户凭证连接到Oracle。您可以使用您的操作系统用户名和密码登录到SQL * Plus,但这仅仅是因为在您的情况下,无论您的凭据如何,SQL * Plus都允许您进入。 Oracle用户与OS用户是分开的。仅仅因为您可以使用给定的用户名和密码登录到操作系统,并不意味着您可以使用相同的凭据登录到Oracle。

大概在你的9i数据库中有一个Oracle用户连接你的应用程序? 11g数据库中是否存在类似的Oracle用户?你有没有尝试连接作为这个用户?你有没有尝试重置密码? (连接为SYS,然后输入alter user username identified by "newpassword";。)

使用连接字符串成功登录到SQL * Plus后,可以查看JDBC中使用的相同用户名,密码和连接字符串。

+0

>有一些Oracle错误消息可能不清楚,但这不是其中之一。 请不要断言类似的东西 现在我都 https://community.oracle.com/message/13110674#13110674 – Ben

0

可能是以下中的一个帮助:

  1. 检查并选择合适的连接字符串的风格,底座上的DB配置:

    从Oracle薄式syntax description

    Connection conn = DriverManager.getConnection 
         ("jdbc:oracle:thin:scott/[email protected]//myhost:1521/myservicename"); 
    

    连接SID(来自ORACLE documentation):

    Connection conn = DriverManager.getConnection 
         ("jdbc:oracle:thin:@myhost:1521:orcl", "scott", "tiger"); 
    
  2. 选择是否添加"as sysdba"用户名(检查FAQ here

  3. 相当不可能的,但可能:检查您的用户名和/或密码区分大小写。在这种情况下,他们将它们用"

2

,因为数据库服务器使用的是强验证该用户和你的客户(无论是SQLPLUS或JDBC)不支持此密码验证这是最有可能发生的事情。您可以升级sqlplus和JDBC精简版,或者让服务器生成强和弱的密码验证程序,以便旧客户端仍可以连接。要做到这一点,请遵循以下步骤:

中设置的登录版本的服务器上SQLNET.ORA〜10:

allowed_logon_version=10 

,并重新生成用户的密码(再生核查员):

ALTER USER user IDENFIFIED BY "newpassword"; 
+1

由于面临非常怪异的登录情况下 不是很明显,这是解决我的问题将OC4J 10.1.3.3.0连接到Oracle 12c。 – Uilian

+0

在设置登录版本后需要重新生成用户密码才能解决问题! – gabriel

0

必须检查用户名和程序数据库和连接字符串的密码,消协改变将导致这个错误

相关问题