“ORA-28001:密码已过期”无法修复
Posted
技术标签:
【中文标题】“ORA-28001:密码已过期”无法修复【英文标题】:"ORA-28001: the password has expired" not fixable 【发布时间】:2012-03-17 19:08:11 【问题描述】:我的生产数据库遇到问题。密码已过期,虽然我更改了密码,但它仍然说它已过期。更奇怪的是,我有一个生产 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>;
这是requested by 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.
【问题讨论】:
和 sqlplus假设 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
【讨论】:
谢谢。它对我有用,但我必须运行一个额外的命令来更新密码! 你确定吗? ALTER USER 语句中“IDENTIFIED BY”后面的文本应该是新密码。【参考方案2】:我 100% 确定我的配置是正确的。我正在使用生产应用服务器中的文件覆盖所有本地数据。还是没有成功。
问题也是这个密码过期问题是在开发过程中突然出现的,所以我确定我没有更改任何东西。
但是,我登录了测试系统并在那里重置了密码。我的测试系统包含大约 100 行,我的生产应用程序大约有 100 万行,所以我可以肯定地告诉你我在正确的数据库中。
重置测试系统密码后,我又可以登录了!所以这整个故事很奇怪。感谢您的支持。
【讨论】:
是的,同样的交易——在开发过程中,WHAM,密码到期。在 SQL Developer 中,我右键单击连接,选择“重置密码”(通常显示为灰色的 iirc;当此错误出现时会激活),甚至可以将密码“更改”为与之前相同的内容。瞧。解决问题。 @doonot 如果我在 oracle 10g 中遇到此错误,您能提供任何帮助吗?因为我没有尝试上述方法但没有帮助。【参考方案3】:您可以发布以下结果吗?另外,您使用的是什么版本的 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>'
我很想知道您使用的是什么配置文件,以及您的设置是什么。
【讨论】:
请看我上面的编辑。这就是我正在使用的:RDBMS:Oracle,版本:Oracle Database 11g Release 11.2.0.1.0 - 64bit Production【参考方案4】:即使我也面临同样的问题。执行以下这些步骤后问题得到解决,
-
检查是否有任何帐户已过期
从 dba_users 中选择用户名、配置文件、account_status、expiry_date;
-
如果没有帐户过期,您可以跳到第 7 步
动态创建 SQL 以使过期帐户未过期。您可以通过重置密码来取消帐户过期。注意:您需要将 password 替换为您用于用户的密码。
选择“更改用户”||用户名 || ' 由 password 识别;'从 dba_users where account_status like 'EXPIRED%' and username != 'XS$NULL';
-
执行第三步生成的SQL
动态创建将解锁锁定帐户的 SQL。
选择“更改用户”||用户名 || '账户解锁;'来自 dba_users 其中 account_status 像 'LOCKED%' 和 username != 'XS$NULL';
-
执行第5步生成的SQL
修改分配给您不想过期的帐户的配置文件,以便将 PASSWORD_LIFE_TIME 设置为 UNLIMITED。这将防止它们再次过期。就我而言,我需要更新 DEFAULT 配置文件。
更改个人资料 DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED ;
参考: http://jaredsoablogaz.blogspot.in/2013/04/weblogic-server-not-starting-due-to.html
-桑迪普
【讨论】:
【参考方案5】:1.转到您的命令行界面。 2.然后输入sqlplus。
【讨论】:
【参考方案6】:只需将 SQLPlus 和受影响的用户连接到您的数据库。 SQLPlus 将提示您更改密码。
【讨论】:
【参考方案7】:我确实遇到了与 Oracle 密码到期类似的问题,当我尝试启动 PLSQL 时,为了解决这个问题,它提示我输入用户名/密码,我输入了正确的用户名,但系统向我抛出密码到期错误以及密码重置输入 。重置密码后,我能够连接到 oracle 数据库。
【讨论】:
【参考方案8】:只需执行此查询:
ALTER USER user_name IDENTIFIED BY new_user_name ;
ALTER USER user_name IDENTIFIED BY user_name ;
提交;
【讨论】:
【参考方案9】:简单的方法,就是这样做:)
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;
【讨论】:
以上是关于“ORA-28001:密码已过期”无法修复的主要内容,如果未能解决你的问题,请参考以下文章
ORA-00704,ORA-00702 bootstrap错误导致库无法启动解决办法
ORA-00704,ORA-00702 bootstrap错误导致库无法启动解决办法
我将如何修复这些“ORA-00933:SQL 命令未正确结束”“ORA-00923:未在预期位置找到 FROM 关键字”错误?
Oracle索引修复 ,ORA-00600: internal error code, arguments: [6200],