Oracle用户expired(grace)状态时长及实际过期日期查询
Oracle用户Expired(Grace)状态相关问题解答
1. Expired(Grace)状态的持续时长
该状态的持续时间由用户所属PROFILE中的PASSWORD_GRACE_TIME参数决定,单位为天。比如参数设置为7,那么从密码过期当日起,用户拥有7天宽限期可登录系统;超出这个期限后,用户状态会变为EXPIRED,无法自行登录,必须由管理员解锁或重置密码。
若PASSWORD_GRACE_TIME设置为UNLIMITED,理论上用户会一直处于Expired(Grace)状态,但实际Oracle通常不允许这种配置(除非手动强制设置)。
2. 查询Expired(Grace)状态用户的实际过期日期
当用户处于Expired(Grace)状态时,dba_users表的expiry_date字段确实为空,此时需结合用户的PROFILE参数和密码变更时间计算最终过期日期,步骤如下:
步骤1:获取用户所属的PROFILE
执行SQL查询目标用户的PROFILE:
SELECT profile FROM dba_users WHERE username = '目标用户名'; -- 替换为实际用户名
步骤2:查询该PROFILE的密码生命周期和宽限期参数
执行SQL获取PROFILE中的PASSWORD_LIFE_TIME(密码有效期)和PASSWORD_GRACE_TIME(宽限期):
SELECT resource_name, limit FROM dba_profiles WHERE profile = '步骤1获取的PROFILE名称' AND resource_name IN ('PASSWORD_LIFE_TIME', 'PASSWORD_GRACE_TIME');
步骤3:计算最终过期日期
最终过期日期 = 密码最后变更日期 + 密码有效期 + 宽限期,用SQL直接计算的写法:
SELECT u.username, u.last_change_date + INTERVAL '1' DAY * TO_NUMBER(p1.limit) + INTERVAL '1' DAY * TO_NUMBER(p2.limit) AS final_expiry_date FROM dba_users u, dba_profiles p1, dba_profiles p2 WHERE u.username = '目标用户名' AND u.profile = p1.profile AND p1.resource_name = 'PASSWORD_LIFE_TIME' AND u.profile = p2.profile AND p2.resource_name = 'PASSWORD_GRACE_TIME';
注意:如果
PASSWORD_LIFE_TIME设置为UNLIMITED,用户不会进入Expired(Grace)状态,上述查询仅适用于配置了有限密码有效期的场景。
内容的提问来源于stack exchange,提问作者Ananthu rajeev
相关产品推荐
相关产品推荐

