是否可以在 Oracle 数据库中设置用户密码的最短有效期

Is it possible to set a mimimum period of validity of a user-password in Oracle Database

我们正在使用 Oracle Database 12c(在接下来的几个月内迁移到 19c)作为应用程序的基础。目前我正在处理一般密码指南以及如何实现指南对 oracle 用户密码的要求。

我知道我可以在 utlpwdmg.sql 脚本中编写自己的密码验证函数来强制密码达到一定程度的复杂性。我还可以设置 PASSWORD_LIFE_TIME 等等。但是否也可以设置一个最短时间,不允许更改密码(例如我已经设置了密码,并且在接下来的24小时内我不允许再次更改我的密码)?我找不到符合此要求的资源。

非常感谢!

据我所知,不是直接的。

My Oracle Support 文档 ID 2036008.1 建议我们创建自己的函数(我们称它为 password_minimum_age)来检查它。

很快,您将从 sys.user$ 中为该特定用户名 select ptime 并将其与 sysdate 进行比较;如果您发现它更改得太快,请报错。

然后您将使用该功能创建配置文件,例如

create profile password_age limit password_verify_function password_minimum_age;

并更改用户以使用该配置文件:

alter user scott profile password_age;

首先,我会拒绝该要求。用户忘记密码的最常见时间是在刚更改密码之后。宣布不允许用户工作 24 小时,因为他们不记得他们刚更改的密码似乎不是一个明智的想法。如果目标是防止用户将密码循环回原始值(即将“password”更改为“password2022”再更改回“password”),您可以设置 password_reuse_time 以防止密码重复使用一段时间一段时间(或永远)。如果目标是防止 DBA 更改用户密码、以该用户身份登录以执行恶意操作,然后立即将密码更改回来的攻击,则正确的方法是以 DBA 可以执行的方式审核密码更改'修改.

如果您确实想要实现这样的功能,您可以扩展您正在使用的任何密码验证功能,以包括对上次更改密码的检查。如果您想盲目地执行要求,可以使用 sys.user$ 中的 ptime。或者 user_history$ 中的 password_date 假设您设置了 password_reuse_timepassword_reuse_max。但我的猜测是你需要做一些更复杂的事情(即允许像 DBA 这样的某些用户提前更改密码)这样当会计副总裁被锁定在系统,因为他确信他昨天设置的密码不起作用,他必须为今晚的董事会会议收集报告。