故障描述
如果您在尝试修改数据库用户的密码为以前曾经使用过的密码时,碰到如下错误:
SQL> alter user med identified by med
*
ERROR at line 1:
ORA-28007: the password cannot be reused
错误提示是,密码‘med’被此用户曾经使用过。
故障解决
在用户新改的密码能被使用前,数据库会给用户分配一个定义各种配置变化的配置文件。因此需要修改配置文件中的参数“PASSWORD_REUSE_MAX”来使其生效。在数据字典中查看此参数的值:
SQL> select resource_name, limit
2 from dba_profiles
3 where profile='TEST'
4 and resource_name='PASSWORD_REUSE_MAX';
RESOURCE_NAME LIMIT
-------------------------------- ----------------------------------------
PASSWORD_REUSE_MAX 3
如果想禁止用户频繁的修改密码,只需非配给用户一个没有密码说明参数的配置文件。执行如下语句:
SQL> select profile, resource_name, limit
2> from dba_profiles
3> where resource_type='PASSWORD' order by 1,2;
PROFILE RESOURCE_NAME LIMIT
---------- -------------------------------- ------------------
DEFAULT FAILED_LOGIN_ATTEMPTS UNLIMITED
DEFAULT PASSWORD_GRACE_TIME UNLIMITED
DEFAULT PASSWORD_LIFE_TIME UNLIMITED
DEFAULT PASSWORD_LOCK_TIME UNLIMITED
DEFAULT PASSWORD_REUSE_MAX UNLIMITED
DEFAULT PASSWORD_REUSE_TIME UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION NULL
TEST FAILED_LOGIN_ATTEMPTS 3
TEST PASSWORD_GRACE_TIME 10
TEST PASSWORD_LIFE_TIME 60
TEST PASSWORD_LOCK_TIME .0006
TEST PASSWORD_REUSE_MAX 3
TEST PASSWORD_REUSE_TIME 1800
TEST PASSWORD_VERIFY_FUNCTION VERIFY_FUNCTION
SQL> alter user SCOTT profile default;
User altered.
操作说明
问题清单中已有所显示,用户的配置文件中明确禁止了用户重新使用以前用过的密码。在Oracle 8i中,允许用户更改密码,只需要设置PASSWORD_REUSE_TIME或者PASSWORD_REUSE_MAX, 这两个参数的其中一个的值为UNLIMITED即可。而从9i开始,需要把这两个参数的值都设置为UNLIMITED。
参考资料
Sql Reference, Volume 2 (Create Profile statement)
Note:114930.1 Oracle Password Management Policy
Note:228991.1 Behavior of PASSWORD_REUSE_MAX and PASSWORD_REUSE_TIME
相关产品
Oracle数据库>Oracle Server企业版
关键字
PASSWORD_VERIFY_FUNCTION; DBA_PROFILES; CHANGE; PASSWORD; USER PROFILE; FAILED_LOGIN_ATTEMPTS; CHANGE PASSWORD Errors ORA-28007