能直接用ALTER USER改密码,前提是能以sqlplus / as sysdba本地登录;若连不上,则需用orapwd重建密码文件并重启实例。能直接用
ALTER USER 改,但前提是能连上数据库;连不上就得重建密码文件,且必须重启实例才生效。
能连上时:用 ALTER USER 直接改,但注意角色权限和登录方式差异
只要还能执行 sqlplus / as sysdba 成功,就不用碰密码文件。此时改密码最稳、最安全:
-
ALTER USER sys IDENTIFIED BY "MyNewPass123";—— 改完后,下次必须带as sysdba才能用新密码登录,比如sqlplus sys/MyNewPass123 as sysdba;只写sqlplus sys/MyNewPass123会报ORA-01017 -
ALTER USER system IDENTIFIED BY "MyNewPass123";—— 改完就能直接conn system/MyNewPass123,无额外限制 - 别用
password system命令——它只在 SQL*Plus 交互模式下有效,脚本中不可靠,且不支持 SYS - 密码里含特殊字符(如
@、/)必须用双引号包裹,否则解析失败
连不上时:用 orapwd 重建密码文件,漏参数=白干
当 sqlplus / as sysdba 报 ORA-01031: insufficient privileges 或直接拒绝连接,说明操作系统认证链断了,必须重建密码文件:
-
orapwd不是“改密码工具”,它只覆盖生成新文件,且必须一次给全关键参数:file=和password=缺一不可 - Windows 下路径示例:
orapwd file=%ORACLE_HOME%\database\PWD%ORACLE_SID%.ora password=MyNewPass123 force=y;Linux 下:orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=MyNewPass123 force=y - 漏
file=或password=,会静默退出或报OPW-00001: invalid argument——没报错 ≠ 成功 - Windows 必须以管理员身份运行 CMD,否则写入失败,生成 0 字节空文件;验证方法:检查目标路径下
PWD*.ora文件大小是否 > 0 且修改时间更新
改完仍连不上?大概率卡在三个隐形环节
命令输对了不代表成功,常见失效点不在语法而在环境细节:
- 没重启 Oracle 实例(Windows 是
OracleService<sid></sid>,Linux 是srvctl stop/start database或shutdown immediate; startup;),旧密码文件还在内存里 - 登录时拼错关键字:
as sys dba(中间多空格)、as sysdba写成as sysdb,都会降级为普通用户认证,触发口令校验失败 - Linux 下未切换到
oracle用户,或ORACLE_SID、ORACLE_HOME未正确设置,导致orapwd写到错误路径,新文件根本没被加载
SYS 密码改完后还能用 / as sysdba 登录吗?取决于认证方式
这是最容易被忽略的逻辑陷阱:操作系统认证(OS Auth)优先于密码文件认证。
- 只要你是 Windows 的
ORA_DBA组成员,或 Linux 的dba组成员,sqlplus / as sysdba就永远不校验 SYS 密码——改不改都不影响该登录方式 - 真正受密码控制的是远程连接或显式指定用户名密码的场景,比如
sqlplus sys/xxx@tnsname as sysdba - 若想强制走密码认证(比如审计要求),需在
sqlnet.ora中设SQLNET.AUTHENTICATION_SERVICES=(NONE),但此举会禁用所有 OS 认证,需同步确认运维流程是否允许











