直接修改DEFAULT profile的PASSWORD_LIFE_TIME为UNLIMITED即可实现密码永不过期,但已过期用户必须执行ALTER USER ... IDENTIFIED BY(即使密码不变)才能恢复连接,且需同步处理PASSWORD_GRACE_TIME和FAILED_LOGIN_ATTEMPTS等关联限制。

直接改 DEFAULT profile 的 PASSWORD_LIFE_TIME 为 UNLIMITED 就行,不用重启数据库,但已过期的用户必须再执行一次 ALTER USER ... IDENTIFIED BY(哪怕密码不变)才能恢复连接。
确认当前密码有效期设置
先查清楚 DEFAULT profile 真正生效的值,避免误判:
- 用
sys或system登录:sqlplus / as sysdba - 执行:
SELECT profile, resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME'; - 如果返回
180,说明就是默认限制;返回UNLIMITED则无需操作;返回空行,表示未显式设置,实际仍按 180 天生效
修改 DEFAULT profile 实现密码永不过期
这条命令会立即生效,影响所有使用 DEFAULT profile 的用户(绝大多数新创建用户默认即此):
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;- 建议顺手也关掉宽限期,避免 JDBC 客户端收到
ORA-28002提示后行为异常:ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME UNLIMITED; - 注意:即使
resource_limit = FALSE,该限制依然生效,不能跳过这步
已过期用户必须重置密码(哪怕用原密码)
修改 profile 只对“尚未过期”的用户生效;已经提示 ORA-28001 或 ORA-28002 的用户,JDBC 连接会直接失败,必须手动触发一次密码更新:
- 执行:
ALTER USER(密码可以和原来完全一样)your_userIDENTIFIED BYcurrent_password; - 如果用户已被锁定(
ORA-28000),加ACCOUNT UNLOCK:ALTER USERyour_userIDENTIFIED BYcurrent_passwordACCOUNT UNLOCK; - 这一步不可省——实测中,仅改 profile 而不执行
ALTER USER,JDBC 仍报错连接拒绝
额外锁控项:FAILED_LOGIN_ATTEMPTS 也要留意
密码过期常和账户锁定耦合出现。若用户因输错密码被锁(ORA-28000),很可能是因为 FAILED_LOGIN_ATTEMPTS 默认为 10:
- 查当前值:
SELECT * FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'FAILED_LOGIN_ATTEMPTS'; - 如需禁用锁定机制:
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED; - 已锁账户仍需单独解锁:
ALTER USERyour_userACCOUNT UNLOCK;
真正容易被忽略的是:profile 修改和用户级密码重置是两件事,缺一不可;且后者必须用原密码显式执行一次,Oracle 才会清除内部过期标记。别信“改了 profile 就万事大吉”。











