web-dev-qa-db-fra.com

"ORA-28001: le mot de passe a expiré" non réparable

Je suis confronté à un problème avec ma base de données de production. Le mot de passe a expiré et bien que j'ai changé le mot de passe, il indique toujours qu'il a expiré. Encore plus étrange, j'ai une application Web de production et une application de développement Web. Les deux accèdent à la même base de données. L'application Web de production fonctionne parfaitement et, avec l'application Web de développement, je reçois toujours:

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

Je me suis déjà connecté au serveur et ai fait ceci:

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

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

Voici les informations demandées par 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. 
19
nimrod

Je suis à 100% sûr que ma configuration est correcte. J'écrasais toutes les données locales avec les fichiers du serveur d'applications productif. Toujours pas de succès.

Le problème est aussi que ce problème d’expiration de mot de passe est venu soudainement alors qu’il se développait, alors je suis sûr de ne rien changer.

Cependant, je me suis connecté au système de test et y ai réinitialisé le mot de passe. Mon système de test contient environ 100 lignes, mon application productive environ 1 million, je peux donc vous dire que je suis sur la bonne base de données. 

Après avoir réinitialisé le mot de passe du système de test, je peux me reconnecter! Donc toute cette histoire est très étrange. Merci pour le soutien.

8
nimrod

En supposant que la base de données Oracle (devrait également fonctionner pour SAMPLE d’Oracle-XE) est sous Unix, ssh-in et:

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
29
kares

Pouvez-vous afficher les résultats de ce qui suit? En outre, quelle version d'Oracle utilisez-vous? Je suppose 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>'

Je serais curieux de voir quel profil vous utilisez et quels sont vos paramètres.

5
Jim

Même je faisais face au même problème. Le problème a été résolu après avoir suivi les étapes mentionnées ci-dessous,

  1. Vérifiez si l'un des comptes est expiré

sélectionnez nom d'utilisateur, profil, status_compte, date d'expiration de dba_users;

  1. Si aucun compte n'est expiré, vous pouvez passer à l'étape 7.
  2. Créer dynamiquement du SQL qui n'expire pas les comptes expirés. Vous pouvez non expirer le compte en réinitialisant le mot de passe. REMARQUE: Vous devrez remplacer {mot de passe} par le mot de passe que vous utilisez pour votre utilisateur.

sélectionnez 'ALTER USER' || nom d'utilisateur || 'identifié par {mot de passe};' de dba_users où account_status comme 'EXPIRED%' et nom d'utilisateur! = 'XS $ NULL';

  1. Exécuter le code SQL généré à l'étape 3
  2. Créez dynamiquement SQL qui déverrouillera les comptes verrouillés.

sélectionnez 'ALTER USER' || nom d'utilisateur || "compte déverrouillé;" de dba_users où account_status comme 'LOCKED%' et nom d'utilisateur! = 'XS $ NULL';

  1. Exécuter le SQL généré à l'étape 5
  2. Modifiez le profil affecté aux comptes que vous ne souhaitez pas expirer afin que PASSWORD_LIFE_TIME soit défini sur UNLIMITED. Cela les empêchera d'expirer à nouveau. Dans mon cas, je devais mettre à jour le profil DEFAULT.

modifier le profil DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Référence: http://jaredsoablogaz.blogspot.in/2013/04/weblogic-server-not-starting-due-to.html

-Sandeep

4
user2357759

 enter image description here 1. Allez à votre interface de ligne de commande . 2. puis tapez sqlplus.

2
Omotayo Peter

Connectez-vous simplement avec SQLPlus et l'utilisateur concerné à votre base de données. SQLPlus vous demandera de changer votre mot de passe.

1
atamanroman

J'ai rencontré un problème similaire avec l'expiration du mot de passe Oracle. Pour résoudre ce problème lorsque j'ai essayé de lancer PLSQL, le nom d'utilisateur/mot de passe m'a été demandé. Après avoir réinitialisé mon mot de passe, j'ai pu me connecter à la base de données Oracle. 

0
DMG

il suffit d'exécuter cette requête:

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

commettre;

0
Karim Oukara