programing

올바른 사용자 이름 및 암호를 지정하여 ORA-01017 가져오기: 잘못된 사용자 이름/암호, 로그온 거부

instargram 2023. 10. 19. 21:52
반응형

올바른 사용자 이름 및 암호를 지정하여 ORA-01017 가져오기: 잘못된 사용자 이름/암호, 로그온 거부

Tomcat의 server.xml에 오라클 데이터베이스 구성이 있습니다.

<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 project)에서 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)

저는 사용자 이름과 비밀번호가 정확하다고 확신합니다.여기서 무슨 일이 일어나고 있는지 힌트 좀 주실 수 있나요?

이것과 비슷한 문제를 해결했습니다.대/소문자 구분 암호에 대해 11g 데이터베이스가 구성되어 있지만 10g 클라이언트를 사용하여 연결하려고 하면 10g 클라이언트가 상위 대/소문자 모두를 데이터베이스로 전송하므로 입력한 암호가 분명히 정확할 때 잘못된 암호가 됩니다.따라서 클라이언트를 11g으로 업그레이드해야 비밀번호를 정확한 경우에 보낼 수 있습니다(단, 빠른 테스트를 위해 비밀번호를 모든 대문자로 변경할 수 있으며 연결할 수 있습니다).

저도 같은 문제에 직면했기 때문에 이 실에 부딪혔습니다.사용자 이름과 비밀번호는 완벽했습니다.SQLPlus 및 다른 응용프로그램에서 해당 자격 증명을 사용하여 로그인할 수 있었습니다.data source.url도 완벽했습니다.

오류를 분석하는 동안 제가 사용하던 ojdbc6.jar가 Oracle 11.1.0.7에 연결하려고 했지만 Oracle은 11.2.0.4였습니다.최신 ojdbc6.jar를 다운로드하여 연결 및 voila를 시도했습니다!

해결됐어요 문제는 제가 사용해서는 안 된다는 거에요

 factory="oracle.jdbc.pool.OracleDataSourceFactory"

그거 제거하고 나면 효과가 좋아요!

암호와 사용자 이름이 소문자이고 대문자 모드의 값이 다를 경우(예: 터키어의 I ̇) 문제가 발생할 수 있습니다.일부 Java-Oracle 연결 라이브러리는 문화 차이를 보지 않고 대문자로 만듭니다.

  • 사용자 이름이 올바르지 않을 수 있습니다.
  • 암호가 올바르지 않을 수 있습니다.
  • 연결하려는 서버/인스턴스가 잘못되었거나 컴퓨터와 서버 또는 응용 프로그램과 SQL 개발자 간에 다를 수 있습니다.
  • 대소문자 구분 암호를 사용하도록 데이터베이스를 구성할 수 있습니다.
  • 암호에 세미콜론이 포함되어 있을 수 있습니다.;응용 프로그램이 연결 문자열을 작성할 때 연결 문자열이 잘리게 하지만 SQL Developer(?)에서 사용할 수 있게 하는 문자입니다.
  • 어디선가 오타가 날 수도 있습니다(?).

SQL 개발자에서는 암호가 작동하지만 코드(Java)에서는 작동하지 않는 유사한 문제가 있습니다.비밀번호를 재설정하려고 했는데 잘 작동합니다.근본 원인은 확실하지 않지만 작동합니다.도움이 되길 바랍니다!

로그온하려는 사용자에게 만료된 암호가 있을 수 있습니다.

호환되지 않는 버전의 Oracle Driver가 이 문제를 일으켰습니다. 응용 프로그램에서 Oracle Driver를 수동으로 등록하거나(작업할 필요가 있었던 jar가 수행), agter java 6 ojdbc.jar가 응용 프로그램의 클래스 경로에 있어야 합니다.따라서 오라클 설치에 구글 호환 드라이버 버전을 사용하여 pom 파일에 선언하고(결과 항아리에 넣는 데 필요한 플러그인 포함) 코드에서 수동으로 참조하거나 ojdbc.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

시스템 레지스터에서 FipsAlgorithmPolicy의 값을 변경해야 합니다.

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

OS를 재부팅할 필요가 없습니다.

언급URL : https://stackoverflow.com/questions/11266280/giving-correct-username-password-get-ora-01017-invalid-username-password-log

반응형