必须先查dba_profiles确认PASSWORD_LIFE_TIME实际值:若为空则继承默认180天,若为数字需修改,若已是UNLIMITED则跳过;修改后需手动重置过期用户密码并解锁,且DEFAULT PROFILE变更会影响所有未指定其他PROFILE的用户。

查清当前 DEFAULT PROFILE 的 PASSWORD_LIFE_TIME 实际值
很多人直接执行 ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED,却没确认它原本是不是已经设为 UNLIMITED,或者压根没生效。必须先查真实配置:
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME';- 如果返回空行,说明该参数未显式设置,会继承 Oracle 内置默认值(11g/19c 均为 180)
- 若
limit是数字(如180),才需要修改;若是UNLIMITED,跳过下一步
执行 ALTER PROFILE 修改密码生命周期
语句本身简单,但大小写、拼写、权限和语法细节极易出错:
- 参数名必须是
PASSWORD_LIFE_TIME(全大写,不能小写或驼峰) -
UNLIMITED不加引号;写成'UNLIMITED'会报ORA-00922: missing or invalid option - 需以
SYSDBA或具有ALTER PROFILE权限的用户执行 - 正确命令:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; - 可顺带调整
PASSWORD_GRACE_TIME避免宽限期干扰:ALTER PROFILE DEFAULT LIMIT PASSWORD_GRACE_TIME UNLIMITED;
修改后仍提示 ORA-28001:密码已过期?
这是最常被忽略的环节:PROFILE 修改只影响「新密码」的生命周期,不重置已有用户的过期状态。
- 查用户当前状态:
SELECT username, account_status, expiry_date FROM dba_users WHERE username = 'YOUR_USER'; - 若
account_status是EXPIRED或EXPIRED(GRACE),即使 PROFILE 已改,登录仍失败 - 必须手动重置密码计时器:
ALTER USER your_user IDENTIFIED BY your_password REPLACE your_old_password; - 该语句不会改密,只是刷新
expiry_date字段(基于新 PROFILE 重新计算) - 如果用户已被锁,还需先解锁:
ALTER USER your_user ACCOUNT UNLOCK;
修改 DEFAULT PROFILE 的实际影响范围
别以为这只是“改个默认值”——它会影响所有未显式指定 PROFILE 的用户,包括后续新建的用户。
- 新建用户默认绑定
DEFAULT,自动继承UNLIMITED - 已有用户只要没执行过
ALTER USER ... PROFILE other_profile,就仍在作用范围内 - 如果只想让个别运维账号永不过期(如
SCOTT、VPXADMIN),应新建 PROFILE 并分配,而非动DEFAULT - 验证分配结果:
SELECT username, profile FROM dba_users WHERE username IN ('SCOTT', 'VPXADMIN');
ALTER PROFILE 语句,而是忘了查用户实际绑定的 PROFILE、忘了已有用户的 expiry_date 不会自动更新、也忘了 UNLIMITED 和 DEFAULT 在策略继承上的根本区别。


















