查当前profile的PASSWORD_LIFE_TIME设置:执行SELECT profile, resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME',limit值为UNLIMITED表示永不过期,180表示180天,DEFAULT则等同于未显式设置。
怎么查当前 profile 的 PASSWORD_LIFE_TIME 设置
直接查 dba_profiles,重点过滤 profile 名和 resource_name。默认情况下所有新用户都用 default profile,所以最常查的是它:
SELECT profile, resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'PASSWORD_LIFE_TIME';
返回的 limit 字段值就是关键:180 表示 180 天;UNLIMITED 表示永不过期;DEFAULT 表示该 profile 继承上级(但 DEFAULT profile 没有上级,实际等同于未显式设置,行为取决于 Oracle 版本,默认仍是 180)。
注意:DBA_PROFILES 是数据库级配置,不体现单个用户的实时状态,只反映 profile 定义的策略。
怎么查某个用户实际的密码到期时间
DBA_USERS 才是看真实状态的地方,EXPIRY_DATE 列显示系统根据 profile 规则和上次改密时间推算出的到期时间:
SELECT username, account_status, expiry_date, profile FROM dba_users WHERE username = 'VPXADMIN';
常见 account_status 值含义:
-
OPEN:账户正常,且离过期还有足够时间 -
EXPIRED(GRACE):已过期,但处于宽限期(默认 7 天),还能登录但必须改密 -
EXPIRED:已过期且宽限期也结束,无法登录,必须由 DBA 重置密码 -
LOCKED:可能因连续输错密码被锁,和密码过期无关
如果 expiry_date 是 NULL,通常说明对应 profile 的 PASSWORD_LIFE_TIME 是 UNLIMITED,或该用户从未设过密码(如外部认证用户)。
为什么查了 DBA_PROFILES 显示 UNLIMITED,但用户还是提示过期
这是最常踩的坑:profile 修改立即生效,但**只对后续密码修改生效**。已过期或处于宽限期的用户,其 EXPIRY_DATE 不会自动清空或延后。
必须手动触发一次密码更新,哪怕用原密码:
ALTER USER vpxadmin IDENTIFIED BY <current_password>;</current_password>
执行后,EXPIRY_DATE 会被重置为 NULL(前提是 profile 确实是 UNLIMITED)。如果用户当前是 EXPIRED 或 LOCKED 状态,还得加 ACCOUNT UNLOCK:
ALTER USER vpxadmin ACCOUNT UNLOCK IDENTIFIED BY <current_password>;</current_password>
漏掉这步,即使 profile 改了,用户仍连不上。
想只改一个用户、不影响其他人,该怎么做
不能动 DEFAULT profile —— 它一改就全局生效。正确做法是新建专用 profile,再 assign 给目标用户:
先复制 DEFAULT 的全部限制项(避免遗漏隐含规则):
CREATE PROFILE vpxadmin_nolimit LIMIT SESSIONS_PER_USER UNLIMITED CPU_PER_SESSION UNLIMITED CPU_PER_CALL UNLIMITED CONNECT_TIME UNLIMITED IDLE_TIME UNLIMITED LOGICAL_READS_PER_SESSION UNLIMITED LOGICAL_READS_PER_CALL UNLIMITED COMPOSITE_LIMIT UNLIMITED PRIVATE_SGA UNLIMITED FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LIFE_TIME UNLIMITED PASSWORD_REUSE_TIME UNLIMITED PASSWORD_REUSE_MAX UNLIMITED PASSWORD_LOCK_TIME 1 PASSWORD_GRACE_TIME 7 PASSWORD_VERIFY_FUNCTION NULL;
再把用户切过去:
ALTER USER vpxadmin PROFILE vpxadmin_nolimit;
验证是否生效:
SELECT username, profile FROM dba_users WHERE username = 'VPXADMIN';
最后提醒:profile 创建后不会自动继承 DEFAULT 后续的变更。如果以后要调整其他限制(比如改 FAILED_LOGIN_ATTEMPTS),得单独去改这个新 profile。











