web-dev-qa-db-ja.com

「ORA-28001:パスワードの有効期限が切れています」修正不可

実稼働データベースに問題があります。パスワードの有効期限が切れており、パスワードを変更しましたが、まだ有効期限が切れていると表示されます。見知らぬ人でさえ、私は実動Webアプリケーションと開発Webアプリケーションを持っています。どちらも同じデータベースにアクセスします。実動Webアプリケーションは完全に機能し、開発Webアプリケーションでは常に次のようになります。

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>;

以下に情報を示します ジムからのリクエスト

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

私は自分の設定が正しいことを100%確信しています。私はすべてのローカルデータを生産的なアプリサーバーのファイルで上書きしていました。まだ成功していません。

問題は、このパスワードの有効期限の問題が開発中に突然発生したことでもあるため、何も変更しなかったと確信しています。

しかし、テストシステムにログインし、そこでパスワードをリセットしました。私のテストシステムには100行、生産的なアプリには100万行が含まれているので、私は間違いなく正しいデータベースにいると言えるでしょう。

テストシステムのパスワードをリセットした後、再度ログインできます!したがって、このストーリー全体は非常に奇妙です。ご支援ありがとうございます。

8
nimrod

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

次の結果を投稿できますか?また、使用している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>'

使用しているプロファイルと設定を確認したいと思います。

5
Jim

私も同じ問題に直面していました。以下の手順に従って問題を解決した後、

  1. アカウントのいずれかが期限切れになっているかどうかを確認します

dba_usersからユーザー名、プロファイル、account_status、expiry_dateを選択します。

  1. 有効期限が切れているアカウントがない場合は、手順7にスキップできます。
  2. 期限切れのアカウントを期限切れにしないSQLを動的に作成します。パスワードをリセットすることにより、アカウントの有効期限を解除できます。注:ユーザーに使用しているパスワードを{password}に置き換える必要があります。

「ALTER USER」を選択||ユーザー名|| '{password}で識別;;' account_statusが「EXPIRED%」およびユーザー名!=「XS $ NULL」のようなdba_usersから。

  1. ステップ3で生成されたSQLを実行します
  2. ロックされたアカウントのロックを解除するSQLを動的に作成します。

「ALTER USER」を選択||ユーザー名|| 'アカウントのロック解除;' account_statusが 'LOCKED%'およびユーザー名!= 'XS $ NULL'のようなdba_usersから。

  1. ステップ5で生成されたSQLを実行します
  2. PASSWORD_LIFE_TIMEがUNLIMITEDに設定されるように、失効させたくないアカウントに割り当てられたプロファイルを変更します。これにより、それらが再び期限切れになるのを防ぎます。私の場合、DEFAULTプロファイルを更新する必要がありました。

プロファイルの変更DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

リファレンス: http://jaredsoablogaz.blogspot.in/2013/04/weblogic-server-not-starting-due-to.html

-サンディープ

4
user2357759

enter image description here 1.コマンドラインインターフェイスに移動します。 2.次に、sqlplusと入力します。

2
Omotayo Peter

SQLPlusと影響を受けるユーザーとDBに接続するだけです。 SQLPlusは、パスワードの変更を求めるプロンプトを表示します。

1
atamanroman

簡単な方法は、それをやるだけです:)

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;
0
Taravat

パスワードの有効期限のOracleで同様の問題に直面しました.PLSQLを起動しようとしたときにこの問題を解決するために、ユーザー名/パスワードでプロンプトが表示され、正しいパスワードを入力しましたが、パスワードのリセット入力とともにパスワード有効期限エラーが表示されます。パスワードをリセットした後、Oracleデータベースに接続できました。

0
DMG

このクエリを実行するだけです:

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

コミット;

0
Karim Oukara