programing

"ORA-28001: 암호가 만료됨"을 수정할 수 없습니다.

bestprogram 2023. 6. 21. 22:48

"ORA-28001: 암호가 만료됨"을 수정할 수 없습니다.

생산 데이터베이스에 문제가 있습니다.비밀번호가 만료되었고 비밀번호를 변경했는데도 여전히 만료된 것으로 표시됩니다.더 이상하게도, 저는 프로덕션 웹 애플리케이션과 개발 웹 애플리케이션을 가지고 있습니다.둘 다 동일한 데이터베이스에 액세스합니다.프로덕션 웹 애플리케이션은 완벽하게 작동하며 개발 웹 애플리케이션을 사용하면 항상 다음과 같은 이점을 얻을 수 있습니다.

10:25:42,919 WARN  [JBossManagedConnectionPool] Throwable while attempting to get a new connection: null
org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (java.sql.SQLException: ORA-28001: the password has expired
)
    at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:225)
    at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.createManagedConnection(LocalManagedConnectionFactory.java:195)
    at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.createConnectionEventListener(InternalManagedConnectionPool.java:633)
    at org.jboss.resource.connectionmanager.InternalManagedConnectionPool.getConnection(InternalManagedConnectionPool.java:267)
    at org.jboss.resource.connectionmanager.JBossManagedConnectionPool$BasePool.getConnection(JBossManagedConnectionPool.java:622)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.getManagedConnection(BaseConnectionManager2.java:404)
    at org.jboss.resource.connectionmanager.TxConnectionManager.getManagedConnection(TxConnectionManager.java:381)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2.allocateConnection(BaseConnectionManager2.java:496)
    at org.jboss.resource.connectionmanager.BaseConnectionManager2$ConnectionManagerProxy.allocateConnection(BaseConnectionManager2.java:941)
    at org.jboss.resource.adapter.jdbc.WrapperDataSource.getConnection(WrapperDataSource.java:89)
    at org.jboss.security.auth.spi.DatabaseServerLoginModule.getUsersPassword(DatabaseServerLoginModule.java:173)
    at org.jboss.security.auth.spi.UsernamePasswordLoginModule.login(UsernamePasswordLoginModule.java:245)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at javax.security.auth.login.LoginContext.invoke(LoginContext.java:784)
    at javax.security.auth.login.LoginContext.access$000(LoginContext.java:203)
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698)
    at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:695)
    at javax.security.auth.login.LoginContext.login(LoginContext.java:594)
    at org.jboss.security.plugins.auth.JaasSecurityManagerBase.defaultLogin(JaasSecurityManagerBase.java:552)
    at org.jboss.security.plugins.auth.JaasSecurityManagerBase.authenticate(JaasSecurityManagerBase.java:486)
    at org.jboss.security.plugins.auth.JaasSecurityManagerBase.isValid(JaasSecurityManagerBase.java:365)
    at org.jboss.security.plugins.JaasSecurityManager.isValid(JaasSecurityManager.java:160)
    at org.jboss.web.tomcat.security.JBossWebRealm.authenticate(JBossWebRealm.java:384)
    at org.apache.catalina.authenticator.FormAuthenticator.authenticate(FormAuthenticator.java:258)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:417)
    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:92)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.process(SecurityContextEstablishmentValve.java:126)
    at org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invoke(SecurityContextEstablishmentValve.java:70)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
    at org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedConnectionValve.java:158)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:330)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:829)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:598)
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
    at java.lang.Thread.run(Thread.java:722)
Caused by: java.sql.SQLException: ORA-28001: the password has expired

    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:439)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:388)
    at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:381)
    at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:564)
    at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:431)
    at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:436)
    at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:186)
    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:359)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
    at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getLocalManagedConnection(LocalManagedConnectionFactory.java:207)
    ... 41 more

이미 서버에 로그인하여 다음 작업을 수행했습니다.

bash
cd /opt/oracle/admin/<SID>
. ./setenv.ora
sqlplus / as sysdba

>sql: ALTER USER <user> IDENTIFIED BY <new password>;

Jim이 요청한 정보는 다음과 같습니다.

SQL> select * from dba_users where username = 'user';

USERNAME USER_ID PASSWORD ACCOUNT_STATUS LOCK_DATE EXPIRY_DATE
------------------------------ ---------- ------------------------------ -------------------------------- ------------------- -------------------
DEFAULT_TABLESPACE TEMPORARY_TABLESPACE CREATED PROFILE INITIAL_RSRC_CONSUMER_GROUP
------------------------------ ------------------------------ ---------------------- ------------------------------ ------------------------------
EXTERNAL_NAME
------------------------------------------------------------------------------------------------------------------------------------------------------
PASSWORD E AUTHENTI
-------- - --------
<user> 50 OPEN
<userDAT> TEMP 29.07.2010 17:38:32 DEFAULT DEFAULT_CONSUMER_GROUP

10G 11G N PASSWORD


SQL> select p.* from dba_users u, dba_profiles p where u.profile = p.profile and u.userName = 'user'; 

PROFILE RESOURCE_NAME RESOURCE LIMIT 
------------------------------ -------------------------------- -------- ---------------------------------------- 
DEFAULT COMPOSITE_LIMIT KERNEL UNLIMITED 
DEFAULT SESSIONS_PER_USER KERNEL UNLIMITED 
DEFAULT CPU_PER_SESSION KERNEL UNLIMITED 
DEFAULT CPU_PER_CALL KERNEL UNLIMITED 
DEFAULT LOGICAL_READS_PER_SESSION KERNEL UNLIMITED 
DEFAULT LOGICAL_READS_PER_CALL KERNEL UNLIMITED 
DEFAULT IDLE_TIME KERNEL UNLIMITED 
DEFAULT CONNECT_TIME KERNEL UNLIMITED 
DEFAULT PRIVATE_SGA KERNEL UNLIMITED 
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD UNLIMITED 
DEFAULT PASSWORD_LIFE_TIME PASSWORD UNLIMITED 
DEFAULT PASSWORD_REUSE_TIME PASSWORD UNLIMITED 
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED 
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD NULL 
DEFAULT PASSWORD_LOCK_TIME PASSWORD 1 
DEFAULT PASSWORD_GRACE_TIME PASSWORD 7 

16 rows selected. 

Oracle DB(Oracle-XE의 SAMPLE에서도 작동해야 함)가 Unix, ssh-in 및 다음과 같이 가정합니다.

sqlplus /nolog

SQL> connect / as SYSDBA
Connected.

SQL> SELECT username, account_status FROM dba_users WHERE ACCOUNT_STATUS LIKE '%EXPIRED%';
# ... your locked account should be listed ...

SQL> ALTER USER sample IDENTIFIED BY sample;         
User altered.

SQL> ALTER USER sample ACCOUNT UNLOCK;
User altered.

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
Profile altered.

SQL> exit

저는 제 구성이 정확하다고 100% 확신합니다.저는 생산적인 앱 서버의 파일로 모든 로컬 데이터를 덮어쓰고 있었습니다.아직 성공하지 못했습니다.

문제는 이 비밀번호 만료 문제가 개발 중에 갑자기 발생한 것이기 때문에 저는 아무것도 변경하지 않았다고 확신합니다.

하지만, 나는 테스트 시스템에 로그인했고 그곳에서 비밀번호를 재설정했습니다.제 테스트 시스템에는 100개의 행이 포함되어 있고, 100만 개의 생산적인 앱이 포함되어 있기 때문에, 제가 올바른 데이터베이스에 있다는 것을 분명히 말씀드릴 수 있습니다.

테스트 시스템의 비밀번호를 재설정한 후 다시 로그인 할 수 있습니다!그래서 이 모든 이야기는 매우 이상합니다.응원해 주셔서 감사합니다.

당신은 다음의 결과를 게시할 수 있습니까?또한 어떤 Oracle 버전을 사용하고 있습니까?11G라고 가정하는 거지?

select * 
  from dba_users 
 where username = '<yourUserName>'

select p.* 
  from dba_users u
     , dba_profiles p 
 where u.profile = p.profile 
   and u.userName = '<yourUserName>'

사용 중인 프로필과 설정이 무엇인지 궁금합니다.

나조차도 같은 문제에 직면하고 있었습니다.아래에 언급된 단계를 따라 문제가 해결되었습니다.

  1. 만료된 계정이 있는지 확인합니다.

dba_users에서 사용자 이름, 프로필, account_status, expiry_date를 선택합니다.

  1. 만료된 계정이 없는 경우 7단계로 건너뛸 수 있습니다.
  2. 만료된 계정이 만료되지 않는 SQL을 동적으로 생성합니다.암호를 재설정하여 계정이 만료되지 않도록 할 수 있습니다.참고: 사용자에게 사용 중인 암호를 {password}(으)로 대체해야 합니다.

dba_users에서 'ALTER USER' || username || '{password}(으)로 식별됨'을 선택합니다. 여기서 account_status는 'EXPIRED%' 및 username!= 'XS$NULL'과 같습니다.

  1. 3단계에서 생성된 SQL 실행
  2. 잠긴 계정의 잠금을 해제할 SQL을 동적으로 생성합니다.

dba_users에서 'ALTER USER' || username || 'account unlock;'을 선택합니다. 여기서 account_status는 'LOCKED%' 및 username!= 'XS$NULL'과 같습니다.

  1. 5단계에서 생성된 SQL 실행
  2. 만료하지 않을 계정에 할당된 프로파일을 수정하여 PASSWORD_LIFE_TIME이 UNMITED로 설정되도록 합니다.이것은 그들이 다시 만료되는 것을 막을 것입니다.저의 경우, 저는 기본 프로필을 업데이트해야 했습니다.

프로필 변경 기본 제한 암호_LIFE_TIME UNLIMIT;

참조: http://jaredsoablogaz.blogspot.in/2013/04/weblogic-server-not-starting-due-to.html

-샌디프

enter image description here 1.명령줄 인터페이스로 이동한 다음 2. sqlplus를 입력합니다.

SQLPlus에 연결하면 영향을 받는 사용자가 DB에 연결됩니다. SQLPlus에서 암호를 변경하라는 메시지가 표시됩니다.

비밀번호 만료와 관련하여 Oracle에서도 비슷한 문제가 발생했습니다. PLSQL을 실행하려고 할 때 사용자 이름/비밀번호를 입력하라는 메시지가 표시되고 올바른 사용자 이름/비밀번호를 입력했지만 시스템에서 비밀번호 재설정 입력과 함께 비밀번호 만료 오류가 발생합니다. 비밀번호를 재설정한 후 Oracle 데이터베이스에 연결할 수 있었습니다.

이 쿼리를 실행하십시오.

ALTER USER user_name IDENTIFIED BY new_user_name ;
ALTER USER user_name IDENTIFIED BY user_name ;

커밋;

쉬운 방법, 그냥 하세요 :)

C:\>sqlplus /nolog
SQL> connect / as SYSDBA
SQL> select * from dba_profiles;
SQL> alter profile default limit password_life_time unlimited;
SQL> alter user hse identified by oracle;
SQL> commit;
SQL> exit;

언급URL : https://stackoverflow.com/questions/9479781/ora-28001-the-password-has-expired-not-fixable