ora-28002 是oracle数据库在密码到期前7天发出的安全提示,非错误,连接仍成功;其触发条件为“当前系统日期−密码最后修改时间≥password_life_time−7”,与登录时间无关,需同时修改profile和重置用户密码才能清除提示。

ORA-28002 是数据库主动发出的安全提示,不是错误
它只说明当前密码已使用接近 PASSWORD_LIFE_TIME 设置的天数(默认 180 天),Oracle 在到期前 7 天开始提醒。连接仍成功,Connected. 会紧随提示之后出现——这说明业务未中断,但倒计时已启动。
真正触发 ORA-28002 的是 profile 中的 PASSWORD_LIFE_TIME 和用户密码创建时间
Oracle 不按“登录时间”或“会话时间”计算,而是严格比对:当前系统日期 − 用户密码最后修改时间 ≥ PASSWORD_LIFE_TIME − 7。只要差值达到或超过该阈值,每次登录都会弹出。
-
PASSWORD_GRACE_TIME(默认也是 7)控制的是“过期后还能用多久”,不影响 ORA-28002 的触发时机 - 即使把
PASSWORD_LIFE_TIME改成UNLIMITED,已进入预警状态的用户仍会继续收到提示,直到重置一次密码 - 查询路径必须走
dba_profiles,不能只看user$或sys.user$底层表——那些不反映生效策略
改 profile 和改用户密码必须配合,缺一不可
单独执行 ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED 只影响未来新设密码;已预警用户必须再执行一次 ALTER USER username IDENTIFIED BY current_password(密码可不变),才能清除倒计时状态。
- 如果用户通过 DBLink 连接其他库,DBLink 所属账号也要单独检查并重置,否则作业或视图可能在后台静默失败
- 应用连接池(如 DBCP、HikariCP)中缓存的连接不会自动感知密码状态变化,重启应用或清空连接池更稳妥
- 部分工具(如 SQL Developer、PL/SQL Developer)会在连接后自动执行
SET AUTOTRACE ON等命令,而这些命令在 ORA-28002 状态下会直接报错退出,表面看像连接失败
生产环境不建议直接设为 UNLIMITED
虽然技术上可行,但审计合规(如等保、ISO27001)通常要求定期轮换密码。更合理的做法是:将 PASSWORD_LIFE_TIME 调整为 90 或 180 天,并搭配自动化脚本提前 15 天通知用户或触发密码更新流程。
容易被忽略的一点:ALTER PROFILE 修改后立即生效,但对已存在的密码完全无感——这个“立即”只针对新密码生效,旧密码的生命周期毫秒都不多给。











