我既不是Oracle专家,也不是数据库管理员。但是,我们已经创建了这个Java程序,并使用OCI驱动程序将其用于连接到Oracle 9i数据库(Windows环境)。
但是当我们迁移到Oracle 11g r2(Linux环境)时,尝试运行该工具时出现此错误:
ORA-01017:无效的用户名/密码;登录被拒绝
我已经尝试了很多可能的代码来连接数据库(指定主机和端口,而不只是SID /服务名称,设置Properties对象,使用OracleDataSource,从OCI驱动程序切换到瘦驱动程序,检查REMOTE_LOGIN_PASSWORDFILE,等等。)但是仍然是相同的错误。
您认为这是驱动程序问题吗?我们是否需要在数据库中配置某些内容?顺便说一下,这些是版本:JDBC => 11.2.0.3.0Oracle 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;
来确认。
请不要假定您可以使用操作系统用户凭据连接到Oracle。您也许可以使用操作系统用户名登录而无需密码即可登录SQL * Plus,但这仅仅是因为在您所处的情况下,SQL * Plus允许您使用任何凭据。 Oracle用户与OS用户是分开的。仅仅因为您可以使用给定的用户名和密码登录到OS,并不意味着您可以使用相同的凭据登录到Oracle。
大概您的9i数据库中有一个Oracle用户,您的应用程序以该用户身份连接?您的11g数据库中是否存在类似的Oracle用户?您是否尝试过以该用户身份连接?您是否尝试过重设密码? (以SYS
身份连接,然后输入alter user username identified by "newpassword";
。)
一旦使用连接字符串成功登录到SQL * Plus,您就可以在JDBC中使用相同的用户名,密码和连接字符串。
对我来说,我安装了oracle客户端11g R2和oracle数据库12.2版本,然后通过使用NETCA在客户端PC的BIN文件夹下创建了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更改了11g中密码的处理方式,现在它们区分大小写,而版本9i中则不区分大小写。
可能是以下帮助之一:
根据数据库配置检查并选择正确的连接字符串样式:
从ORACLE薄样式syntax description:
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:scott/tiger@//myhost:1521/myservicename");
与SID连接(来自ORACLE documentation):
Connection conn = DriverManager.getConnection
("jdbc:oracle:thin:@myhost:1521:orcl", "scott", "tiger");
检查是否在用户名中添加了"as sysdba"
(检查FAQ here)
不太可能,但是可能的:检查您的用户名和/或密码是否区分大小写。在这种情况下,将它们包含在"
中
您必须在程序中检查数据库的用户名和密码以及连接字符串,CASE的更改将导致此错误