必须用SELECT username, profile FROM dba_users WHERE username = 'YOUR_USERNAME'查询用户实际绑定的PROFILE,而非默认假设为DEFAULT;查实后方可执行ALTER PROFILE修改密码策略。
如何查看当前用户使用的 PROFILE
oracle
用户密码过期策略由其关联的 profile 控制,不是直接设在用户上。先确认目标用户用的是哪个 profile:
常见结果是
,但不能假设——必须查实。如果返回空行,说明用户不存在或你没
权限,需换有权限账号操作。
修改 PROFILE 的 PASSWORD_LIFE_TIME 为 UNLIMITED
找到 PROFILE 名后(比如
),执行 ALTER PROFILE:
注意几点:
是区分大小写的参数名,写成
会报错
该语句不立即生效于已过期用户;对已处于
或
状态的用户,仍需手动解锁+重置密码
如果 PROFILE 被多个用户共用,此修改会影响所有使用它的用户,不是单用户隔离操作
验证修改是否生效
改完 PROFILE 后,查
确认值已更新:
正确结果应为
。若仍显示数字(如
),说明语句未成功执行,或连接用户无
权限。
另外,别忘了检查
和
——它们和
同属密码策略,常被一并调整,但不是本问题必需项。
oracle知识库
oracle知识库下载
下载
为什么改了 PROFILE 还提示密码过期?
这是最常被忽略的环节:PROFILE 修改只影响「未来」的密码生命周期,不影响「当前」已过期状态。如果用户当前状态是
,即使 PROFILE 已设为
,登录仍会失败。
必须补一步解锁并重置(哪怕设回原密码):
或者更稳妥地用新密码:
否则,下次登录时 Oracle 仍按旧过期时间校验,直接拒绝连接,不会重新读 PROFILE 再判断。
SELECT username, profile FROM dba_users WHERE username = 'YOUR_USERNAME';DEFAULTDBADEFAULTALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;PASSWORD_LIFE_TIMEpassword_life_timeORA-02379: profile limit does not existEXPIRED(GRACE)EXPIREDdba_profilesSELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME';UNLIMITED180ALTER PROFILEPASSWORD_GRACE_TIMEFAILED_LOGIN_ATTEMPTSPASSWORD_LIFE_TIMEEXPIREDUNLIMITEDALTER USER your_user IDENTIFIED BY same_password_as_before ACCOUNT UNLOCK;ALTER USER your_user IDENTIFIED BY new_secure_password ACCOUNT UNLOCK;