Oracle 19c多租户架构下设置用户密码永不过期及登录锁定策略说明_20260430
在 Oracle 19c 多租户架构中业务用户通常创建在具体的 PDB 里而不是 CDB$ROOT 中。因此查看用户状态、修改密码策略前必须先进入对应 PDB。否则可能出现“查不到用户”或“改了但没生效”的情况。一、进入数据库并切换到对应 PDB先切换到 Oracle 用户并确认当前实例su - oracle echo $ORACLE_SID如果需要切换实例例如本次环境使用UTF8CDB1export ORACLE_SIDUTF8CDB1 sqlplus / as sysdba进入 SQL*Plus 后查看当前 CDB 下有哪些 PDBshow pdbs;示例结果CON_ID CON_NAME OPEN MODE ------ --------- ---------- 3 IETQMS READ WRITE 5 QMS READ WRITE切换到对应 PDB例如进入QMSalter session set containerQMS;确认当前所在容器show con_name;如果显示CON_NAME ------------------------------ QMS说明已经进入 QMS PDB。后续查询用户、修改 Profile都只针对当前 PDB 生效。二、查看用户是否锁定或密码是否过期set lines 200 pages 200 col username for a30 col account_status for a30 col profile for a20 col expiry_date for a20 select username, account_status, profile, to_char(expiry_date,yyyy-mm-dd hh24:mi:ss) expiry_date from dba_users where oracle_maintained N order by username;重点看两列字段含义ACCOUNT_STATUS用户状态OPEN表示正常EXPIRY_DATE密码过期时间空值表示当前不会过期如果用户状态是OPEN并且EXPIRY_DATE为空说明用户当前正常密码不会因生命周期到期而过期。实际检查中QMSADMIN、QMS_ADMIN等用户状态为OPEN且EXPIRY_DATE为空说明密码永不过期已生效。三、查看 Profile 密码策略Oracle 用户密码过期和锁定策略由 Profile 控制。常见业务用户一般使用DEFAULTProfile。set lines 200 col profile for a20 col resource_name for a35 col limit for a30 select profile, resource_name, limit from dba_profiles where profile DEFAULT and resource_name in ( FAILED_LOGIN_ATTEMPTS, PASSWORD_LOCK_TIME, PASSWORD_LIFE_TIME, PASSWORD_GRACE_TIME ) order by resource_name;常见推荐结果FAILED_LOGIN_ATTEMPTS 10 PASSWORD_GRACE_TIME 7 PASSWORD_LIFE_TIME UNLIMITED PASSWORD_LOCK_TIME 1含义如下参数含义FAILED_LOGIN_ATTEMPTS 10连续输错密码 10 次后锁定PASSWORD_LOCK_TIME 1锁定 1 天后自动解锁PASSWORD_LIFE_TIME UNLIMITED密码永不过期PASSWORD_GRACE_TIME 7密码过期宽限期密码永不过期时基本不触发四、设置密码永不过期进入对应 PDB 后执行alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited;如果想一次性整理成推荐策略可以执行alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LOCK_TIME 1 PASSWORD_LIFE_TIME UNLIMITED PASSWORD_GRACE_TIME 7;这套配置的效果是密码永不过期 连续输错 10 次会锁定 锁定 1 天后自动解锁。五、验证是否生效查看 Profileselect profile, resource_name, limit from dba_profiles where profile DEFAULT and resource_name in ( FAILED_LOGIN_ATTEMPTS, PASSWORD_LOCK_TIME, PASSWORD_LIFE_TIME, PASSWORD_GRACE_TIME ) order by resource_name;确认看到PASSWORD_LIFE_TIME UNLIMITED再查看用户select username, account_status, profile, to_char(expiry_date,yyyy-mm-dd hh24:mi:ss) expiry_date from dba_users where oracle_maintained N order by username;如果业务用户ACCOUNT_STATUS OPEN且EXPIRY_DATE为空就说明密码永不过期已经生效。六、注意事项alter profile DEFAULT只影响当前所在 PDB。比如在QMS执行只影响QMS在IETQMS执行只影响IETQMS。如果有多个 PDB需要分别切换进去执行alter session set containerQMS; alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited; alter session set containerIETQMS; alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited; alter session set containerYJXT; alter profile DEFAULT limit PASSWORD_LIFE_TIME unlimited;已经处于EXPIRED LOCKED的用户不会因为修改 Profile 自动变成OPEN。这类用户大多是 Oracle 组件用户、示例用户或历史遗留用户生产环境不建议随便解锁。七、总结Oracle 用户密码是否过期不是直接修改DBA_USERS.EXPIRY_DATE而是通过 Profile 里的PASSWORD_LIFE_TIME控制。生产环境推荐配置PASSWORD_LIFE_TIME UNLIMITED FAILED_LOGIN_ATTEMPTS 10 PASSWORD_LOCK_TIME 1 PASSWORD_GRACE_TIME 7应用账号可以设置密码永不过期但失败登录锁定策略不要关闭。业务要稳安全的门栓也要留着。