【问题标题】:How to update a VERIFY_PASSWORD_FUNCTION in oracle for users to retain his password for 1 day at least before change/alter it如何在 oracle 中更新 VERIFY_PASSWORD_FUNCTION 以使用户在更改/更改密码之前至少将其密码保留 1 天
【发布时间】:2019-04-14 05:06:56
【问题描述】:

这是客户需要那里的一项要求 Oracle 用户不会很快更改他的密码,因此他们需要至少保留一天才能更改密码。所以不能在同一天更改,我们必须更新 VERIFY_PASSWORD_FUNCTION 代码来设置限制最低密码使用期限 1 天。

【问题讨论】:

  • 这似乎是一个虚假的——或者至少是被误导的——要求。很容易想到用户可能希望或需要在更改密码后立即更改密码的原因。为什么不让他们?
  • 不,我不认为它是假的,客户在不同情况下可能有这样的要求。
  • 因此,如果用户的密码被更改为不安全的密码,您是否希望确保他们将不安全的密码保留至少 24 小时?
  • 它总是很强大,在这个函数中,我们已经设置了具有多个特殊字符和字母数字字符的逻辑的强密码场景,并且 1 天的密码保留是附加要求,所以我们已经以这种方式修改了代码。

标签: oracle passwords schema verify


【解决方案1】:

在“VERIFY_PASSWORD_FUNCTION”函数中附加以下代码:

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 表,但有时我们在进行更改时会有一些不同的要求。
猜你喜欢
  • 2015-12-20
  • 1970-01-01
  • 2014-07-27
  • 2021-04-01
  • 1970-01-01
  • 2022-09-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多