Java Oracle 11g r2 ORA-01017:用户名/密码无效;通过JDBC驱动程序连接时拒绝登录

Java Oracle 11g r2 ORA-01017:用户名/密码无效;通过JDBC驱动程序连接时拒绝登录,java,oracle,jdbc,oracle11g,Java,Oracle,Jdbc,Oracle11g,我不是Oracle专家,也不是数据库管理员。但是我们有一个我们创建的Java程序,它使用OCI驱动程序连接到Oracle 9i数据库Windows环境 但是,当我们迁移到Oracle 11g r2 Linux环境时,在尝试运行该工具时出现了以下错误: ORA-01017:用户名/密码无效;拒绝登录 我尝试了很多可能的代码来连接数据库,指定主机和端口,而不仅仅是SID/服务名称,设置属性对象,使用OracleDataSource,从OCI驱动程序切换到精简驱动程序,检查远程登录密码文件,等等。但仍

我不是Oracle专家,也不是数据库管理员。但是我们有一个我们创建的Java程序,它使用OCI驱动程序连接到Oracle 9i数据库Windows环境

但是,当我们迁移到Oracle 11g r2 Linux环境时,在尝试运行该工具时出现了以下错误:


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

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

你认为这是司机的问题吗?我们需要在数据库中配置一些东西吗? 顺便说一下,这些是版本: 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
是否缺少我们应该设置的配置?
提前谢谢。

我猜您的密码可能有问题。oracle更改了11g中密码的处理方式,现在它们区分大小写,而在9i版中则不区分大小写。

我猜您的密码中存在大小写问题。oracle改变了11g中密码的处理方式,现在密码区分大小写,而在9i版中密码则不区分大小写


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

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

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


我使用的用户可以接受任何密码,只要我作为根用户连接

您正在使用SQL*Plus,同时登录到与数据库运行相同的计算机,并且您作为具有dba组成员身份的用户登录到Linux。在这种情况下,无论指定什么用户名或密码,都可以登录。事实上,我只是试着跑

sqlplus blah/blah as sysdba
连接到我的Oracle 11g XE数据库,尽管我的数据库没有blah用户,但连接良好

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

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

您的应用程序连接的9i数据库中可能有一个Oracle用户?您的11g数据库中是否存在类似的Oracle用户?您是否尝试以此用户身份连接?你试过重置它的密码吗?以SYS身份连接,然后输入由newpassword;标识的alter user username

一旦您可以使用连接字符串成功登录SQL*Plus,您就可以在JDBC中使用相同的用户名、密码和连接字符串


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

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

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


我使用的用户可以接受任何密码,只要我作为根用户连接

您正在使用SQL*Plus,同时登录到与数据库运行相同的计算机,并且您作为具有dba组成员身份的用户登录到Linux。在这种情况下,无论指定什么用户名或密码,都可以登录。事实上,我只是试着跑

sqlplus blah/blah as sysdba
连接到我的Oracle 11g XE数据库,尽管我的数据库没有blah用户,但连接良好

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

请不要假设您可以使用OS用户凭据连接到Oracle。您可以使用操作系统用户名而不使用密码登录SQL*Plus,但这只是因为在您的情况下,SQL*Plus允许您登录,而不管您的凭据如何。Oracle用户与OS用户是分开的。只是因为你可以使用gi登录到你的操作系统 ven用户名和密码并不意味着您可以使用相同的凭据登录到Oracle

您的应用程序连接的9i数据库中可能有一个Oracle用户?您的11g数据库中是否存在类似的Oracle用户?您是否尝试以此用户身份连接?你试过重置它的密码吗?以SYS身份连接,然后输入由newpassword;标识的alter user username


一旦您可以使用连接字符串成功登录SQL*Plus,您就可以在JDBC中使用相同的用户名、密码和连接字符串。

可能是以下帮助之一:

根据数据库配置,检查并选择正确的连接字符串样式:

从ORACLE精简样式:

从ORACLE连接SID:

检查是否在用户名中添加了sysdba检查常见问题

不太可能但可能:检查您的用户名和/或密码是否区分大小写。在这种情况下,它们被封装在


可能是以下帮助之一:

根据数据库配置,检查并选择正确的连接字符串样式:

从ORACLE精简样式:

从ORACLE连接SID:

检查是否在用户名中添加了sysdba检查常见问题

不太可能但可能:检查您的用户名和/或密码是否区分大小写。在这种情况下,它们被封装在


这种情况很可能发生,因为数据库服务器正在为此用户使用强验证器,而您的客户端sqlplus或JDBC不支持此密码验证器。您可以升级sqlplus和JDBC-thin,或者让服务器同时生成强密码和弱密码验证器,以便旧客户端仍然可以连接。为此,请遵循以下步骤:

在服务器上的sqlnet.ora中,将登录版本设置为10:

allowed_logon_version=10
并重新生成用户密码以重新生成验证器:

ALTER USER user IDENFIFIED BY "newpassword";

这种情况很可能发生,因为数据库服务器正在为此用户使用强验证器,而您的客户端sqlplus或JDBC不支持此密码验证器。您可以升级sqlplus和JDBC-thin,或者让服务器同时生成强密码和弱密码验证器,以便旧客户端仍然可以连接。为此,请遵循以下步骤:

在服务器上的sqlnet.ora中,将登录版本设置为10:

allowed_logon_version=10
并重新生成用户密码以重新生成验证器:

ALTER USER user IDENFIFIED BY "newpassword";

您必须在程序中检查数据库和连接字符串的用户名和密码,更改大小写将导致此错误

您必须在程序中检查数据库和连接字符串的用户名和密码,更改大小写将导致此错误

对于我,我安装了oracle client 11g R2和oracle database 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中从系统用户更改其他用户的密码来解决这个问题。这就是我解决错误的方法。

我安装了oracle client 11g R2和oracle database 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中从系统用户更改其他用户的密码来解决这个问题。这就是我解决错误的方法。

ORA-01017:无效的用户名/密码;拒绝登录表示您的用户名/密码有误…请与您的DB团队确认正确的密码credentials@theDbGuy密码不会错,因为我使用的是一个虚拟用户,只要我以根用户身份连接,它就可以接受任何密码。@DarshanLila那么,为什么我不指定连接字符串就可以连接呢?connect字符串和ORACLE_SID引用了我试图连接toORA-01017的同一个实例:无效的用户名/密码;拒绝登录表示您的用户名/密码有误…请与您的DB团队确认正确的密码credentials@theDbGuy密码不会错,因为我使用的是一个虚拟用户,只要我以根用户身份连接,它就可以接受任何密码。@DarshanLila那么,为什么我不指定连接字符串就可以连接呢?connect字符串和ORACLE_SID指的是我试图连接到的同一个实例,我使用的用户接受任何密码,只要我作为根用户连接。这并不能解释为什么我可以在不指定连接字符串的情况下进行连接。我使用的用户可以接受任何密码,只要我作为根用户进行连接。这并不能解释为什么我可以在不指定连接字符串的情况下进行连接
错误消息可能不清楚,但这不是其中之一。请不要断言这样的事情,我现在面临非常奇怪的登录案例根本不明显>有一些Oracle错误消息可能不清楚,但这不是其中之一。请不要断言这样的事情,我现在面临着非常奇怪的登录情况,这一点都不明显,谢谢,这解决了我连接OC4J 10.1.3.3.0到Oracle 12c的问题。在设置登录版本后重新生成用户密码是解决问题的关键!谢谢,这解决了我将OC4J 10.1.3.3.0连接到Oracle 12c的问题。设置登录版本后需要重新生成用户密码是解决问题的关键!