首页 > 代码库 > 【翻译自mos文章】运行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误

【翻译自mos文章】运行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误

运行utlpwdmg.sql之后报ORA-28003, ORA-20001, ORA-20002, ORA-20003, ORA-20004 错误。

适用于:
Oracle Server - Enterprise Edition - Version 8.1.7.0 and later
Information in this document applies to any platform.
Checked for relevance on 15-Sep-2012

原因:
运行 utlpwdmg.sql 脚本可以对用户的密码进行安全限制。新密码强制施行如下的规则:
1.包含一个字符,一个数字,一个标点符号
2.不同于username
3.不同于密码验证函数中列示出来的words(单词)
4.跟老密码相比,至少有3个字符不同。

以上规则在新版的db 软件中有所变化,因此,推荐你查看你的db版本中的该脚本,以确认有哪些详细的规则。

解决方案:
不是所有的客户都需要或者希望这个安全级别。可以用如下的方法来remove掉该功能。

1. Connect internal to the database.
2. drop function verify_function;
3. ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION null;


此时,在没有任何错误的情况下,使用with the ‘alter user xyz identified by xyz‘ 命令,密码可以被修改

utlpwdmg.sql脚本也会修改default profile.
The default profile settings 是在数据库被创建的时候,the DEFAULT profile 的资源参数值( resource parameters )。
在运行脚本之前,如果你修改了这些资源参数并且在使用其他的参数,你应该restore(还原)这些值。
If you modified those resource parameters and you were using other parameter values before running the script, you should restore those values.


Before running the script
-------------------------
SQL> SELECT * FROM dba_profiles
2 WHERE profile = ‘DEFAULT‘
3 AND resource_type = ‘PASSWORD‘;

PROFILE RESOURCE_NAME RESOURCE LIMIT
------------------- -------------------------------- -------- ------------
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 UNLIMITED
DEFAULT PASSWORD_LOCK_TIME PASSWORD UNLIMITED
DEFAULT PASSWORD_GRACE_TIME PASSWORD UNLIMITED

After running the script:
------------------------
SQL> SELECT * FROM dba_profiles
2 WHERE profile = ‘DEFAULT‘
3 AND resource_type = ‘PASSWORD‘;

PROFILE RESOURCE_NAME RESOURCE LIMIT
-------------------- -------------------------------- -------- ----------------
DEFAULT FAILED_LOGIN_ATTEMPTS PASSWORD 3
DEFAULT PASSWORD_LIFE_TIME PASSWORD 60
DEFAULT PASSWORD_REUSE_TIME PASSWORD 1800
DEFAULT PASSWORD_REUSE_MAX PASSWORD UNLIMITED
DEFAULT PASSWORD_VERIFY_FUNCTION PASSWORD VERIFY_FUNCTION
DEFAULT PASSWORD_LOCK_TIME PASSWORD .0006
DEFAULT PASSWORD_GRACE_TIME PASSWORD 10
7 rows selected.

You can restore the default setting by running this script as internal or as sysdba.

SQL> ALTER PROFILE DEFAULT LIMIT
2 PASSWORD_LIFE_TIME UNLIMITED
3 PASSWORD_GRACE_TIME UNLIMITED
4 PASSWORD_REUSE_TIME UNLIMITED
5 PASSWORD_REUSE_MAX UNLIMITED
6 FAILED_LOGIN_ATTEMPTS UNLIMITED
7 PASSWORD_LOCK_TIME UNLIMITED;