Oracle
用户密码有效期是Oracle公司在11g中为了数据库的安全性默认引入的功能,创建用户是默认有效期为180天,如果超过180天用户密码未做修改则会出现ORA-28001: 口令已经失效
异常(该用户也无法登录,密码过期后,业务进程连接数据库异常,影响业务使用)。
遇到这种情况,一般重新修改用户密码是最直接的解决方式,例如:
/** 1.查询oracle所有用户密码有效期信息(查看用户的proifle是那个,一般都是default) **/
SELECT USERNAME, ACCOUNT_STATUS, EXPIRY_DATE, PROFILE FROM DBA_USERS ORDER BY EXPIRY_DATE ASC;
/*
查询字段说明:
USERNAME: 用户名/所有者
ACCOUNT_STATUS: OPEN为正常,EXPIRED & LOCKED 为有效期到期用户已被锁定
EXPIRY_DATE: 有效期到期时间
PROFILE: 用户PROFILE
*/
-- 查看指定概要文件(如default)的密码有效期设置
SELECT P.* FROM DBA_PROFILES P WHERE P.PROFILE = 'DEFAULT' AND P.RESOURCE_NAME = 'PASSWORD_LIFE_TIME';
/** 2.先修改密码规则策略为密码永不过期(当然需要有dba权限才行) **/
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
/** 3.修改密码 ALTER USER 用户名 IDENTIFIED BY "新密码"; **/
ALTER USER LN IDENTIFIED BY "PN_PWD";
/** 4.重新设置密码规则策略为有效期为180天(注意这里单位是天) **/
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME 180;
为什么要重新设置密码的有效期为180天?这里需要根据实际情况而定有些应用系统(等保三级评测)就为了数据库的安全要求不能设置无限期!
另外如果修改了密码的规则策略为无限期,任然不能修改密码,修改不了的原因可能是
/** 1.对应密码复杂度验证函数查询(有可能密码复杂度验证不通过,需要查询具体验证的函数) **/
SELECT * FROM DBA_PROFILES WHERE RESOURCE_NAME = 'PASSWORD_VERIFY_FUNCTION';
/** 记得查出来的函数名称备份了,后面置为NULL改完密码后重新指定回校验函数 **/
/** 2.如果 DEFAULT 设置了密码验证函数,则置为 null 后重新修改密码 **/
ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;