必须同时设置PASSWORD_REUSE_TIME和PASSWORD_REUSE_MAX且resource_limit启用才生效,仅设前者无效;二者需均非UNLIMITED,否则Oracle忽略时间限制。
为什么改了 PASSWORD_REUSE_TIME 还能重用旧密码
因为 password_reuse_time 单独生效的前提是:它必须和 password_reuse_max 配合使用,且两者都非 unlimited。只设 password_reuse_time = 30,而 password_reuse_max 是 unlimited 或空值,oracle 就会忽略时间限制,允许立即重用旧密码。
如何真正禁止用户在30天内重用同一密码
必须同时设置两个参数,缺一不可:
ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_TIME 30;ALTER PROFILE DEFAULT LIMIT PASSWORD_REUSE_MAX 5;
这表示:同一密码在被修改 5 次、且距上次使用已满 30 天后,才允许再次使用。若只想靠时间卡死(不计修改次数),可设 PASSWORD_REUSE_MAX 为一个极大值(如 999),但不能是 UNLIMITED —— Oracle 对 UNLIMITED 的处理逻辑是“绕过该约束”。
执行前必须确认 resource_limit 已启用
PASSWORD_REUSE_TIME 和 PASSWORD_REUSE_MAX 属于资源限制类策略,依赖数据库参数 resource_limit 开启才能生效:
- 查当前状态:
SHOW PARAMETER resource_limit;(返回FALSE则未启用) - 启用它:
ALTER SYSTEM SET resource_limit = TRUE; - 该操作需
SYSTEM或具备ALTER SYSTEM权限的用户执行,且重启监听或实例不必要
常见误操作与验证要点
改完别急着测试,先验证是否真正落地:
- 查 profile 实际值:
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name IN ('PASSWORD_REUSE_TIME', 'PASSWORD_REUSE_MAX'); - 注意大小写:如果用户是通过
CREATE USER ... IDENTIFIED BY VALUES方式克隆密码哈希,PASSWORD_REUSE_*策略不触发校验 - CDB/PDB 场景下,必须在 **每个容器**(CDB$ROOT + 所有 PDB)中分别执行
ALTER PROFILE,否则 PDB 内用户不受限 - 已有用户不会自动“回溯检查”,策略仅对后续
ALTER USER ... IDENTIFIED BY操作起效
真正起作用的边界很窄:必须是用户主动改密、且新密码恰好匹配近期某次旧密码时,Oracle 才会比对时间+次数双条件。日常连接、解锁、密码过期重置等场景都不触发该校验。











