如何在oracle中更新VERIFY_PASSWORD_函数,以便用户在更改/更改密码之前至少保留其密码1天

如何在oracle中更新VERIFY_PASSWORD_函数,以便用户在更改/更改密码之前至少保留其密码1天,oracle,passwords,schema,verify,Oracle,Passwords,Schema,Verify,这是客户需要的一项要求,Oracle用户不会很快更改密码,因此他们需要在更改密码前至少保留一天。因此,它不能在同一天更改,我们必须更新验证密码功能代码,以设置1天的最低密码期限。在“验证密码功能”功能中添加以下代码: CREATE OR REPLACE FUNCTION "SYS"."VERIFY_PASSWORD_FUNCTION" (username varchar2, password varchar2, old_password varchar2) RETURN boolean IS

这是客户需要的一项要求,Oracle用户不会很快更改密码,因此他们需要在更改密码前至少保留一天。因此,它不能在同一天更改,我们必须更新验证密码功能代码,以设置1天的最低密码期限。

在“验证密码功能”功能中添加以下代码:

CREATE OR REPLACE FUNCTION "SYS"."VERIFY_PASSWORD_FUNCTION" 
(username varchar2,
password varchar2,
old_password varchar2)
RETURN boolean IS
last_change sys.user$.ptime%type;
minimum_age number :=1;
userexist integer;
begin
-- Set minimum password age 
select count(*) into userexist from sys.user$ where name=username;
if (userexist != 0) then
    select ptime into last_change from sys.user$ where name=username;
    if sysdate - last_change < minimum_age then
        raise_application_error(-20010, 'Password changed too soon');
    END IF; 
end if;
end;
/
SQL> create user TEST11 identified by asdfhe#24HyrE profile USERS;

User Created.

SQL> alter user test11 identified by asdfhe#24HyrWW;
alter user test11 identified by asdfhe#24HyrWW
*
ERROR at line 1:
ORA-28003: password verification for the specified password failed
ORA-20010: Password changed too soon

SQL> 

SQL> select name,ptime from user$ where name='TEST11';

NAME                           PTIME
------------------------------ ---------
TEST11                         08-NOV-18

SQL> update user$ set ptime='03-Nov-18' where name='TEST11';

1 row updated.

SQL> select name,ptime from user$ where name='TEST11';

NAME                           PTIME
------------------------------ ---------
TEST11                         03-NOV-18

SQL> commit;

Commit complete.

SQL> alter user test11 identified by asdfhe#24HyrWW;

User altered.

SQL>

由于我们无法在同一天内更改密码,因此我们更新了ptime值以进行验证,并再次尝试更改Test11用户的密码。

更新SYS内部表是非常糟糕的做法。显然,这只是测试代码的一个聪明的技巧,但不要在生产环境(或您关心的任何其他环境)中进行测试,因为您有可能使Oracle支持合同失效。是的,我们不必更新sys表,但是,有时,我们在进行更改时会有一些不同的需求。这似乎是一个虚假的需求,或者至少是误导性的需求。很容易想到为什么用户在更改密码后可能希望或需要立即更改密码。为什么不让他们使用?不,我不认为这是假的,客户端在不同的情况下可能有这样的要求。因此,如果用户的密码被更改为不安全的密码,你想确保他们将其不安全的密码保留至少24小时吗?在这个功能中,它总是很强大,我们已经使用多个特殊字符和字母数字字符的逻辑设置了强密码方案,并且1天密码保留是附加要求,因此我们以这种方式修改了代码。