最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何手动解锁Oracle用户并重置密码
时间:2026-08-14 10:28:49 编辑:袖梨 来源:一聚教程网
Oracle账户被锁定需先以sqlplus / as sysdba本地登录,再执行ALTER USER username ACCOUNT UNLOCK;若同时密码过期,须追加ALTER USER username IDENTIFIED BY newpass。
用 sqlplus / as sysdba 登录是前提,别输密码
本地服务器上操作时,sqlplus / as sysdba 是最可靠的方式——它不依赖数据库密码,而是靠操作系统权限(比如 oracle 用户)认证。如果直接输 sqlplus sys/xxx as sysdba 却报 ORA-01017: invalid username/password,说明你卡在登录环节,不是用户锁了,是连不上库。
常见错误现象:远程连接时硬套这个命令,结果失败。因为 / as sysdba 默认只允许本地 OS 认证,远程需配置 sqlnet.ora 并启用 SQLNET.AUTHENTICATION_SERVICES = (NTS)(Windows)或 (BEQ)(Linux),否则必须用密码方式登录。
- 确认你是 oracle 用户(
id -un输出oracle) - 确保
$ORACLE_HOME已设置,且$PATH包含$ORACLE_HOME/bin - 执行
sqlplus / as sysdba后看到Connected to: Oracle Database...才算真正进去了
ALTER USER ... ACCOUNT UNLOCK 和 IDENTIFIED BY 必须分开执行
账户锁定和密码过期是两回事:锁了可能只是输错 5 次,但密码本身还有效;过期则可能状态是 EXPIRED(GRACE) 或 EXPIRED。只解锁不改密,下次登录仍可能因密码过期被拦;只改密不解锁,语句会报 ORA-28000: the account is locked。
所以顺序不能乱,且两条语句都得显式提交(虽然 DDL 默认自动 commit,但养成加 COMMIT; 的习惯更稳妥):
ALTER USER scott ACCOUNT UNLOCK;ALTER USER scott IDENTIFIED BY newpass123;
COMMIT;
- 用户名大小写敏感:如果创建时用了双引号(如
"Scott"),这里也得写成"Scott" - 密码含特殊字符(如
@、/)要加单引号包裹:IDENTIFIED BY 'p@ss/w0rd' - Oracle 12c+ 密码需满足复杂度要求(默认至少 8 位、含大小写字母+数字),否则报
ORA-28003: password verification failed
查状态别只看 dba_users,重点盯 account_status
执行解锁前,先确认目标用户当前状态,避免白忙活。运行:
SELECT username, account_status, expiry_date FROM dba_users WHERE username = 'SCOTT';
返回的 account_status 可能是这些值:
-
OPEN:正常,不用动 -
LOCKED或LOCKED(TIMED):输错密码被锁,需ACCOUNT UNLOCK -
EXPIRED:密码过期且宽限期已过,必须改密 -
EXPIRED(GRACE):还能登 3 次,但登录后强制改密,此时可只改密不解锁 -
EXPIRED & LOCKED:同时发生,两条命令都得跑
注意:expiry_date 为 null 表示密码永不过期(概要文件设为 UNLIMITED),这时候锁了就只是锁,跟密码无关。
生产环境别碰 DEFAULT 概要文件,除非你真清楚后果
有人一遇到批量用户锁住,就想“干脆把密码有效期关掉”,于是执行:
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
这确实能防再锁,但风险在于:它影响所有用 DEFAULT 概要文件的新建用户,且无法回滚到之前策略(除非手动记下原值)。如果审计要求密码 90 天必须轮换,这么干等于绕过合规。
更稳妥的做法是:
- 对临时应急用户单独处理(
ALTER USER ... IDENTIFIED BY ... ACCOUNT UNLOCK) - 对长期高频用户,新建专用概要文件(如
no_expire_profile),再ALTER USER scott PROFILE no_expire_profile - 查清锁源:是应用连错密码循环重试?还是人为误操作?比单纯解锁更重要
最后提醒一句:所有操作必须在维护窗口内执行,ALTER USER 虽是 DDL 不阻塞查询,但若用户正在事务中,解锁瞬间可能触发会话中断——这点容易被忽略。