是否可以在 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_time
或 password_reuse_max
。但我的猜测是你需要做一些更复杂的事情(即允许像 DBA 这样的某些用户提前更改密码)这样当会计副总裁被锁定在系统,因为他确信他昨天设置的密码不起作用,他必须为今晚的董事会会议收集报告。
我们正在使用 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_time
或 password_reuse_max
。但我的猜测是你需要做一些更复杂的事情(即允许像 DBA 这样的某些用户提前更改密码)这样当会计副总裁被锁定在系统,因为他确信他昨天设置的密码不起作用,他必须为今晚的董事会会议收集报告。