提供正确的用户名&密码,获取ORA-01017:用户名/密码无效;登录被拒绝

时间:2012-06-29 17:25:56

标签: database oracle spring oracle11g tomcat7

我在tomcat的server.xml中有oracle数据库配置

<Resource name="jdbc/sgfdb" auth="Container"
          driverClassName="oracle.jdbc.OracleDriver"
          url="jdbc:oracle:thin:@databaseurl:1521:schema"
          username="username" password="password" maxActive="20" maxIdle="10"
          maxWait="-1"
          factory="oracle.jdbc.pool.OracleDataSourceFactory"
          type="oracle.jdbc.pool.OracleDataSource"/>

然后在我的网络应用程序(spring mvc项目)中,我在context.xml中删除它

<Context>
 <ResourceLink name="jdbc/sgfdb"
        global="jdbc/sgfdb"
        type="javax.sql.DataSource"/>
</Context>

之前我能够连接到这个数据库。我没有工作一个星期。然后,当我尝试启动它时,总是得到:

SEVERE: Servlet.service() for servlet [action] in context with path [/WebUI] threw exception [Request processing failed; nested exception is javax.persistence.QueryTimeoutException: Could not open connection] with root cause
**java.sql.SQLException: ORA-01017: invalid username/password; logon denied**

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:389)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:382)
at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:573)
at    oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:366)
at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:752)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:366)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
at oracle.jdbc.pool.OracleDataSource.getPhysicalConnection(OracleDataSource.java:280)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:207)
at oracle.jdbc.pool.OracleDataSource.getConnection(OracleDataSource.java:157)
at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70)
at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:278)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297)
at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.getConnection(LogicalConnectionImpl.java:169)
at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.extractPhysicalConnection(ConnectionProxyHandler.java:82)
at org.hibernate.engine.jdbc.internal.proxy.ConnectionProxyHandler.continueInvocation(ConnectionProxyHandler.java:138)
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81)
at $Proxy36.prepareStatement(Unknown Source)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$5.doPrepare(StatementPreparerImpl.java:147)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl$StatementPreparationTemplate.prepareStatement(StatementPreparerImpl.java:166)
at org.hibernate.engine.jdbc.internal.StatementPreparerImpl.prepareQueryStatement(StatementPreparerImpl.java:145)
at org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1720)
at org.hibernate.loader.Loader.doQuery(Loader.java:828)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:289)
at org.hibernate.loader.Loader.doList(Loader.java:2447)
at org.hibernate.loader.Loader.doList(Loader.java:2433)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2263)
at org.hibernate.loader.Loader.list(Loader.java:2258)
at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:470)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:355)
at org.hibernate.engine.query.spi.HQLQueryPlan.performList(HQLQueryPlan.java:195)
at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1215)
at org.hibernate.internal.QueryImpl.list(QueryImpl.java:101)
at org.hibernate.ejb.QueryImpl.getSingleResult(QueryImpl.java:284)
at org.hibernate.ejb.criteria.CriteriaQueryCompiler$3.getSingleResult(CriteriaQueryCompiler.java:258)
at mycompany.services.impl.JobServiceImpl.getNumberOfJobs(JobServiceImpl.java:51)
at mycompany.controller.ExecJobController.execJobList(ExecJobController.java:78)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:307)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)

我确定用户名和密码是正确的。 有人可以给我一些关于这里发生了什么的暗示吗?

9 个答案:

答案 0 :(得分:8)

刚刚解决了类似的问题。如果为区分大小写的密码配置了11g数据库,但是您尝试使用10g客户端进行连接,则10g客户端将以大写形式将密码全部发送到数据库,因此当您输入的密码清楚时,密码无效正确。因此,您需要将客户端升级到11g以使其在正确的情况下发送密码(但是为了快速测试,您可以将密码更改为全部大写,并且您将能够连接)。

答案 1 :(得分:2)

解决。问题是我不应该使用

 factory="oracle.jdbc.pool.OracleDataSourceFactory"

删除后,效果很好!

答案 2 :(得分:2)

因为我遇到同样的问题而陷入这个线程。用户名和密码非常完美。能够在SQLPlus和其他应用程序中使用这些凭据登录。 datasource.url也很完美。

在分析错误时,发现我使用的ojdbc6.jar试图连接到Oracle 11.1.0.7,而我的Oracle是11.2.0.4。下载了最新的ojdbc6.jar并尝试连接并瞧!

答案 3 :(得分:1)

  • 用户名可能不正确。
  • 密码可能不正确。
  • 您连接的服务器/实例可能不正确,或者您的计算机与服务器之间或应用程序与SQL Developer之间存在差异。
  • 数据库可能配置为使用区分大小写的密码。
  • 密码可能包含分号;字符,导致连接字符串在应用程序构建连接字符串时被截断,但允许您从SQL Developer中使用它(?)
  • 你可能在某个地方有错字(?)

答案 4 :(得分:1)

如果您的密码和用户名为小写且其大写模式具有不同的值(如i,土耳其语中的İ),则可能会导致问题。 一些Java-Oracle连接库使它们成为大写,而没有观察文化差异。

答案 5 :(得分:0)

您尝试登录的用户可能有一个过期的密码

答案 6 :(得分:0)

我有一个类似的问题,密码在SQL Developer中有效,但在代码(Java)中无效。我试图重设密码,并且工作正常。不确定根本原因,但是它可以工作。希望这会有所帮助!

答案 7 :(得分:0)

对我而言,OracleDriver的不兼容版本导致了此问题 您的应用程序应该手动注册oracle驱动程序(我需要使用的jar正在做)或agter java 6 ojdbc.jar应该在您的应用程序的类路径中。 因此,适用于oracle的google兼容驱动程序版本,可以在pom文件中声明它(使用所需的插件将其放入生成的jar中),然后从代码中手动引用它,或者将ojdbc.jar放在您的jar可以看到它的地方 有用的链接:

关于连接到oracle db: https://www.codejava.net/java-se/jdbc/connect-to-oracle-database-via-jdbc

关于Java类路径:https://docs.oracle.com/javase/7/docs/technotes/tools/windows/classpath.html

答案 8 :(得分:0)

您应在系统寄存器中更改 FipsAlgorithmPolicy 的值:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicy] "Enabled" = dword: 00000000

您不需要重新启动操作系统。