ORA-28000 表示账户被锁,主因是输错密码超限或管理员手动锁定;需用DBA权限执行ALTER USER ... ACCOUNT UNLOCK解锁,并查lock_date及FAILED_LOGIN_ATTEMPTS定位根因。
ORA-28000 是账户被锁,不是密码错或连不上
看到 ora-28000: the account is locked,第一反应别急着改密码或重配连接串——这错误和网络、驱动、url 都无关,只说明 oracle 已明确拒绝该用户登录,因为它的状态是 locked 或 locked(timed)。常见诱因就两个:连续输错密码达到 failed_login_attempts 限制(默认 10 次),或管理员手动执行了 alter user ... account lock。
用 DBA 账户快速解锁(最常用路径)
你得先有 SYS、SYSTEM 或带 ALTER USER 权限的账号。推荐用 sqlplus /nolog 连:
sqlplus /nolog<br>SQL> CONNECT / AS SYSDBA然后执行:
-
ALTER USER <username> ACCOUNT UNLOCK;</username>—— 解锁动作本身 -
ALTER USER <username> IDENTIFIED BY <new_password> ACCOUNT UNLOCK;</new_password></username>—— 如果同时要重置密码,这条一步到位 - 执行后无需
COMMIT,DDL 立即生效
"MyUser"),解锁时也得带引号。
查清为什么被锁,避免 5 分钟后又锁
光解锁不查因,等于给定时炸弹换电池。运行这两条 SQL:
-
SELECT username, account_status, lock_date FROM dba_users WHERE username = 'YOUR_USER';—— 看状态是LOCKED(TIMED)(输错触发)还是纯LOCKED(人工锁) -
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'FAILED_LOGIN_ATTEMPTS';—— 查当前失败上限,默认是 10,超了就自动锁
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 30;但生产环境不建议设为 UNLIMITED,会削弱防暴力破解能力。
Navicat / PL/SQL Developer 图形化操作的坑
图形工具点几下就能解锁,但容易忽略两个细节:
- 必须用
Sysdba或Sysoper角色登录(普通Normal模式进不去 Users 列表) - 在编辑用户界面里,“账户被锁住”勾选框取消后,一定要点
应用(Apply),不是只点确定或关闭——很多用户点了关闭以为成功,其实没提交 - 有些版本(如 PL/SQL Dev 14+)对密码策略变更需额外勾选“强制修改密码”,否则下次登录仍可能报
ORA-28001(密码过期)
真正麻烦的不是解锁动作本身,而是锁住背后暴露的配置漂移:应用配置里还存着旧密码、连接池没正确 close 导致反复认证失败、或者监控脚本在后台静默刷错密码。动手前先看一眼 lock_date 和最近的登录日志,比盲目调大 FAILED_LOGIN_ATTEMPTS 更管用。










