今天客户突然来找我说服务器起不来了,启动报错,我一看不得了,这可是大事,还好客户的系统面向内部,使用的人比较少,于是我让他们把日志发给我,经过查看日志,发现一段java报错日志:
Caused by: java.sql.SQLException: ORA-28001: the password has expired
经过查资料发现,这是因为Oracle 11G在安装时默认的安全协议是密码每180天修改一次(如果我们的实施人员部署环境时不把这个修改成无限制的话,可能会在半年后对客户造成损失和给开发人员挖坑),现在,我们以sysdba权限连接数据库用下面这句SQL可以查询我们的Oracle数据库是否有每180天需要修改数据库的设置。
如果要在CMD中操作,先以sysdba连接数据库,进入Oracle自带的工具SQL Plus:
sqlplus/nolog
conn / as sysdba;
conn sys/123@orcl as sysdba;
然后执行查询安全协议定时修改密码的设置的SQL语句查询:
SELECT * FROM DBA_PROFILES WHERE PROFILE = 'DEFAULT' AND RESOURCE_NAME = 'PASSWORD_LIFE_TIME';
(因为我这里已经修改成无限制了,之前的也没有截图,我就语言描述一下)
查询出来看到LIMIT字段下的值是"180"的话,那就是说明当前已连接的Oracle数据库需要在每隔180天时修改用户的密码。
这时我们执行把安全协议的设置改为无限制,不限时修改密码的SQL语句:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
COMIT;
执行完可以再执行上面查询安全协议设置的语句,当LIMIT字段是"UNLIMITED"时就说明已经修改成功了。
然后执行修改密码过期的用户的密码的SQL语句:
ALTER USER 用户名 IDENTIFIED BY 密码;
这个时候如果用户已被锁定,需要执行解锁用户的SQL语句:
ALTER USER 用户名 IDENTIFIED BY ORACLE ACCOUNT UNLOCK;