java.sql.SQLException: ORA-28000: 帐户已被锁定

本文详细介绍了如何解决Oracle数据库中账户由于登录失败次数过多而被自动锁定的问题,包括通过SQL命令检查并修改FAILED_LOGIN_ATTEMPTS参数,以及确认是否影响到不同实例的情况。此外,还提供了解决跨实例问题的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

20110809

今天早上过来,开发人员说数据库连接不上,看了tomcat日志报错信息是

java.sql.SQLException: ORA-28000: 帐户已被锁定

然后按照以前的办法找到了解锁的方法,想到可能是某个同事登录失败次数过多。因为oracle 默认的策略是oracle11g中默认在default概要文件中设置了 “FAILED_LOGIN_ATTEMPTS=10次”,当输入密码错误次数达到设置值将导致此,该用户会自动锁住。 

解决方法

[oracle@developserver ~]$ sqlplus / as sysdba

SQL>select * from dba_profiles where RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS';
SQL> ALTER USER 用户名 ACCOUNT UNLOCK;

SQL>alter profile default limit failed_login_attempts unlimited;--不限制连接数

SQL> alter profile DEFAULT limit FAILED_LOGIN_ATTEMPTS 1000; --设定用户连接失败数超过1000次之后自动锁住

 可以查看profiles的一些其他内容 

SQL>select * from dba_profiles where RESOURCE_NAME='FAILED_LOGIN_ATTEMPTS';

PROFILE                                RESOURCE_NAME                        RESOURCE        LIMIT
------------------------------         --------------------------------         --------              --------

MONITORING_PROFILE                 FAILED_LOGIN_ATTEMPTS                PASSWORD           UNLIMITED

可是开发人员的电脑上,还是报被锁了

后面刚好看到小黄在学jdbc-oracle。然后就实验了一下连接开发人员的账户。发现也可以。

突然想到他们的实例名不一样,会不会是我这边修改的策略不影响到另外个实例。

想到一个定义:oracle实例是表空间的集合。实例是老大

然后实验登录用sqlplus登录到不同的实例中修改。

[oracle@developserver ~]$ sqlplus / as sysdba@另外一个实例名

然后执行上面的步骤,就可以了。如果用另外一个实例名登录不成功有可能是tnsname.ora文件的设置的问题,可以如下添加

tnsname.ora增加:
另外一个实例名=
 (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME =另外一个实例名) ) ) 

经验:操作之前一定要分清楚操作的是那个实例,记住每个实例都是独立的,不影响到别的实例


### SQL Server 连接时遇到 Java 抛出 ORA-28000 帐户锁定的问题 当尝试通过 JDBC 连接到 Oracle 数据库并收到 `java.sql.SQLException: ORA-28000: the account is locked` 错误时,表明用于连接数据库的用户账户已被锁定。此错误通常发生在以下几个场景之一: - 多次登录失败导致账户自动锁定 - 账户由管理员手动锁定 - 密码过期而未能及时更改[^1] #### 解决方案概述 为了恢复访问权限,需执行一系列操作来诊断和修复问题。 #### 查询当前配置文件设置 首先确认受影响用户的 profile 设置,这有助于了解具体的锁定策略和其他安全参数。可以使用如下命令查询指定用户的 profile: ```sql SELECT * FROM dba_profiles WHERE profile IN (SELECT DEFAULT_PROFILE FROM DBA_USERS WHERE USERNAME='YOUR_USERNAME'); ``` 上述语句中的 `'YOUR_USERNAME'` 应替换为实际用户名[^3]。 #### 验证账户状态 接着检查目标账户的状态以确定其是否确实处于锁定状态。可以通过运行下面这条 SQL 语句完成这项工作: ```sql SELECT ACCOUNT_STATUS, LOCK_DATE FROM DBA_USERS WHERE USERNAME = 'YOUR_USERNAME'; ``` 如果结果显示该账号已经被锁定,则需要采取进一步措施解锁它[^4]。 #### 执行解锁操作 对于拥有适当权限的操作员来说,可以直接利用 SYSDBA 权限解除特定用户的锁定状况。具体做法是在具有相应权限的情况下输入以下指令: ```bash $ sqlplus / as sysdba SQL> ALTER USER YOUR_USERNAME ACCOUNT UNLOCK; ``` 这里同样要记得把 `'YOUR_USERNAME'` 替换成真实的用户名字符串。 #### 修改密码(如有必要) 考虑到可能存在由于忘记更新而导致的有效期限届满的情况,在解锁之后还应该考虑重置或延长现有密码的有效时间。例如: ```sql ALTER USER YOUR_USERNAME IDENTIFIED BY new_password REPLACE old_password; ``` 或者简单地改变密码而不涉及旧密码: ```sql ALTER USER YOUR_USERNAME IDENTIFIED BY "new_secure_password"; ``` 请注意选择强健的新密码,并遵循公司内部的安全政策指导。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

福海鑫森

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值