我有一个应用程序将它的数据存储在Oracle 11g Express Edition数据库中。当Oracle用户密码开始过期(进入宽限期)时,应用程序抛出异常(ORA-28002)并停止工作。我需要找到一种方法来保持应用程序在此期间运行并通知管理员,因此密码可以在到期之前更改。
然而,我真正的问题是,我需要在该宽限期内设置我的数据库用户,以便我可以编程和测试我的应用程序,看看我的代码是否有效。我试图在dba_users中更改到期日期,但我没有所需的权限。我甚至不确定这是正确的做法。
如何让数据库服务器认为我的用户帐户很快就会过期,以便我可以编写代码来处理该事件?
答案 0 :(得分:3)
您需要在数据库级别执行此操作的权限。普通用户甚至无法明确锁定或过期自己的帐户。 (如果设置了配置文件,您可以故意使用错误的密码锁定它)
我知道使用户失效的唯一方法(没有数据库级别命令)是通过设置时钟前进来欺骗数据库。
如果您没有DBA权限,则您不太可能拥有更改系统时钟的权限。
我试图在dba_users中更改失效日期,但我没有 这样做所需的特权。我甚至不确定这是正确的 方法
不,不要对DBA_USERS进行更改。您需要使用“ALTER PROFILE”命令更改DEFAULT配置文件的PASSWORD_GRACE_TIME。所有相关的更改都需要ALTER PROFILE系统priv才能这样做。因此,如果没有DBA权限,您就无法做到。
答案 1 :(得分:2)
查看USER_USERS
它将为您提供登录用户自己的到期日期,以便您的应用程序可以在帐户到期之前向用户发出警告。
答案 2 :(得分:0)
解决: 不知何故,我的数据库管理员将用户配置文件从DEFAULT更改为EXPIREPROFILE。然后我修改了配置文件的密码生命周期和宽限期:
ALTER PROFILE EXPIREPROFILE LIMIT PASSWORD_LIFE_TIME 1;
ALTER PROFILE EXPIREPROFILE LIMIT PASSWORD_GRACE_TIME 21;
我已过期帐户并更改了密码。当我查看dba_users时,密码到期日是明天。但在此之后账户没有立即到期,它进入了21天的宽限期。
现在我可以编写代码来处理这种特定情况并进行测试。感谢大家的帮助:))