最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何解决Oracle数据库中用户账号因多次尝试登录被锁定
时间:2026-07-10 10:46:45 编辑:袖梨 来源:一聚教程网
必须用SYSDBA权限账号(如sys或system)才能解锁账户,普通用户执行ALTER USER...ACCOUNT UNLOCK会因权限不足报错;最常用方式是SQL命令直接解锁,需先查状态再执行ALTER USER SCOTT ACCOUNT UNLOCK,可合并重置密码;若解锁后立即再锁,需检查profile中FAILED_LOGIN_ATTEMPTS限制并调整;图形工具操作需右键用户Properties取消Account Locked勾选;解锁后仍连不上需排查密码过期、后台错误连接及应用配置。
必须用具备 sysdba 权限的账号(如 sys 或 system)才能解锁,普通用户执行 alter user ... account unlock 会报权限不足错误。
用 SQL 命令直接解锁账户
这是最常用、最可控的方式,适用于命令行或 PL/SQL Developer、SQL Developer 等工具中操作。
- 先确认目标用户状态:
SELECT username, account_status, lock_date FROM dba_users WHERE username = 'SCOTT';—— 如果account_status是LOCKED或EXPIRED & LOCKED,说明已被锁 - 执行解锁:
ALTER USER SCOTT ACCOUNT UNLOCK;—— 注意语法中ACCOUNT UNLOCK是连写,中间不能加下划线或空格 - 如果同时要重置密码(比如你已知原密码失效),可合并执行:
ALTER USER SCOTT IDENTIFIED BY newpass ACCOUNT UNLOCK; - 执行后务必查证:
SELECT username, account_status FROM dba_users WHERE username = 'SCOTT';—— 确保返回OPEN
为什么刚解锁又马上被锁?重点查 FAILED_LOGIN_ATTEMPTS
账户反复被锁,不是没解锁成功,而是触发机制还在运行。根本原因是 profile 中的登录失败次数限制仍在生效。
- 查当前用户用的 profile:
SELECT username, profile FROM dba_users WHERE username = 'SCOTT'; - 查该 profile 的失败限制:
SELECT resource_name, limit FROM dba_profiles WHERE profile = 'DEFAULT' AND resource_name = 'FAILED_LOGIN_ATTEMPTS';—— 默认通常是10 - 临时禁用锁定(测试或运维场景):
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED; - 若只想放宽但不取消:
ALTER PROFILE DEFAULT LIMIT FAILED_LOGIN_ATTEMPTS 30; - 注意:修改 profile 对所有使用该 profile 的用户生效,不是单个用户设置
图形界面操作(PL/SQL Developer / Oracle SQL Developer)
适合不熟悉 SQL 语句、或需快速定位多个锁定用户的场景,但依赖客户端功能完整性。
- 用
sys或system登录后,在左侧对象浏览器展开Users节点 - 找到目标用户(如
SCOTT),右键 →Properties(或Edit) - 取消勾选
Account Locked(有些版本叫Locked或显示为锁图标) - 若界面上有
Password输入框,建议一并填新密码并勾选Change password on first login(尤其对新交付环境) - 点击
Apply或OK—— 部分旧版 PL/SQL Developer 需额外点Commit才真正提交
解锁后仍连不上?别漏掉密码过期和连接来源问题
ORA-28000 常和 ORA-28001(密码过期)共存,且真实原因往往藏在后台自动连接行为里。
- 检查是否同时过期:
SELECT username, account_status FROM dba_users WHERE username = 'SCOTT';—— 若返回EXPIRED & LOCKED,只解锁不够,必须改密码 - 查最近锁定时的 IP 和时间:
SELECT username, os_username, machine, terminal, timestamp FROM dba_audit_session WHERE returncode != 0 AND username = 'SCOTT' ORDER BY timestamp DESC;—— 看是不是某个 ETL 工具或 DBLink 在后台刷错密码 - 确认监听器日志位置:
lsnrctl status输出里的Listener Parameter File路径,然后查listener.log,过滤对应用户名失败记录 - 如果应用持续报错,优先排查应用配置里的连接字符串密码是否同步更新,而不是反复手动解锁
真正麻烦的从来不是那条 ALTER USER ... ACCOUNT UNLOCK,而是不知道谁、在哪、用什么频率在撞锁。查 dba_audit_session 和 listener.log 比单纯解锁重要得多。
相关文章
- 诛仙世界云若·梦影游仙新时装怎么获得 07-29
- 检疫区最后一站灭鼠者成就如何完成 07-29
- 蚂蚁森林神奇海洋2026年1月26日答案 07-29
- 三角洲行动长弓溪谷2.2日密码是多少 07-29
- html-anything 怎么安装?Codex/Claude Code 本地 HTML 编辑器教程 07-29
- Gardenin新滤镜成就如何解锁 07-29