相关错误:ORA-28000: the account is locked
1、通过连接数据库,并查看锁定的用户,查看具体的被锁时间:
SQL> select username,lock_date from dba_users where username='TEST';
SELECT username, account_status,lock_date, PROFILE FROM dba_users;
EXPIRED & LOCKED 口令到期并锁定
LOCKED(TIMED) 密码错误次数超过了系统设置的允许最大次数,用户被锁定
2、找到监听日志:
在Oracle安装服务器找到/oracle/diag/tnslsnr/ora11g_db2V10/listener/trace/listener.log文件,该文件会记录oracle的一些跟踪信息;
3、查看监听日志
在Linux服务器,找到该目录,执行tail -20 listener.log命令,查看该文件的最后20行内容;
或是通过工具连接Linux服务器,在对应目录下下载到本地,通过本地编辑工具查看对应时间的记录:
Mon Nov 14 11:32:53 2022
14-11月-2022 11:32:53 * (CONNECT_DATA=(SID=kcop)(CID=(PROGRAM=JDBC Thin Client)(HOST=jdbc)(USER=root))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=12352)) * establish * kcop * 0
4、分析:
造成Oracle的账号被锁定的原因是由于修改数据库密码后。服务器配置的连接数据库的信息没有修改完全,所以造成了该账号登录Oracle经常失败,在oracle11g中,默认在default概要文件中设置了FAILED_LOGIN_ATTEMPTS=10,当输入密码错误次数达到设置值将导致此问题。
确定用户所使用概要文件:
select username,profile from dba_users;
5、解锁:
解锁:
alter user username(用户名) account unlock;
锁定:
alter user username(用户名) account lock;
注:
一般数据库默认是10次尝试失败后锁住用户
5.1、查看FAILED_LOGIN_ATTEMPTS的值
select * from dba_profiles where RESOURCE_NAME = 'FAILED_LOGIN_ATTEMPTS';
5.2、修改次数:50
alter profile default limit FAILED_LOGIN_ATTEMPTS 50;
5.3、修改为无限次(为安全起见,不建议使用)
alter profile default limit FAILED_LOGIN_ATTEMPTS unlimited;
5.4、另外,小伙伴经常遇到数据库用户密码过期的情况,要定期去修改密码很麻烦,那么我们可以设置用户密码不过期:
5.4.1、查询指定概要文件的密码有效期设置:
SELECT * FROM dba_profiles s WHERE s.profile='DEFAULT' AND resource_name='PASSWORD_LIFE_TIME';
5.4.2、修改为无限制:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
5.4.3、若已出现 ora-28002 报错,则修改密码:
alter user 用户名 identified by 密码;