能,但必须在数据库服务器本机用具备OS认证权限的用户执行sqlplus / as sysdba直连;该方式依赖操作系统认证机制,检查用户是否属于dba组(Linux)或以管理员身份运行(Windows),成功后执行ALTER USER username IDENTIFIED BY "新密码" ACCOUNT UNLOCK重置并解锁账户。

能,但前提是必须在数据库服务器本机用具备 OS 认证权限的用户(如 Linux 的 oracle 用户、Windows 的管理员)执行 sqlplus / as sysdba ——这是唯一绕过密码验证直连的方式,其他任何远程或带用户名的登录方式都会卡在认证环节。
为什么 sqlplus / as sysdba 能绕过密码?
Oracle 的操作系统认证机制不依赖数据库内建密码,而是检查当前 OS 用户是否属于 dba 组(Linux/Unix)或是否以管理员身份运行(Windows)。只要满足这个条件,/ as sysdba 就能跳过所有密码校验直接连接到实例。若报 ORA-01031: insufficient privileges,说明:
• Linux 下当前用户未加入 dba 组(需 usermod -aG dba oracle 并重新登录)
• Windows 下未右键“以管理员身份运行” CMD 或 PowerShell
• 切勿尝试 sqlplus sys as sysdba,它会强制要求输入 sys 密码,而你正面临密码过期/遗忘问题
ALTER USER ... IDENTIFIED BY 必须加 ACCOUNT UNLOCK
密码过期常伴随账户状态变为 EXPIRED(GRACE) 或 LOCKED。只改密码不解锁,下次登录仍失败:
• 正确写法:ALTER USER scott IDENTIFIED BY "MyP@ssw0rd123" ACCOUNT UNLOCK;
• 双引号包裹密码:防止大小写和特殊字符被 Oracle 自动转为大写(不加引号时 password123 会被存为 PASSWORD123,导致应用连不上)
• 密码需满足策略:Oracle 11g+ 默认要求 ≥8 位、含大小写字母、数字、特殊字符;若报 ORA-28003,换一个合规密码再试
• 不要省略 ACCOUNT UNLOCK:已锁定账户仅改密码无效
改完密码后,别急着让应用切流
本地 sqlplus 能连 ≠ 应用能连,常见断连原因藏在连接字符串里:
• 应用配置中密码含 @、/、: 等字符,未做 URL 编码或转义(如 jdbc:oracle:thin:@host:1521/orcl 中密码若为 p@ss/w0rd,实际需写成 p%40ss%2Fw0rd)
• TNS 名称解析失败:应用用的是旧 tnsnames.ora 或 JDBC URL 指向错误服务名
• 应用缓存了旧密码(尤其 Spring Boot 的 HikariCP 连接池),需重启应用进程而非仅 reload 配置
• 最简验证方式:sqlplus scott/"MyP@ssw0rd123"@//host:1521/orcl 手动跑一次,比看日志更快定位是密码问题还是网络/解析问题
真正容易被忽略的是:即使你把 PASSWORD_LIFE_TIME 改成 UNLIMITED,也不会自动刷新已过期用户的账户状态——必须对每个过期用户显式执行一次 ALTER USER ... IDENTIFIED BY,否则下次登录照样弹 ORA-28001。


















