CDB下修改SYS/SYSTEM密码需区分认证方式:ALTER USER在CDB$ROOT执行可同步至所有PDB,但SYS密码还存于密码文件,SYSTEM仅存于数据字典;orapwd仅重置密码文件中的SYS凭证,不影响SYSTEM,且需匹配format版本并重启数据库生效。

能直接用 ALTER USER 修改,但必须分清场景:CDB下改一次就同步所有PDB,而密码文件(orapwd)只影响远程SYSDBA登录,且不碰SYSTEM。
修改前先确认当前认证方式是OS还是密码文件
Oracle对SYS的认证分两种路径,改完密码却仍能空口令登录,八成是因为走的是操作系统认证。执行以下命令快速判断:
SQL> show parameter remote_login_passwordfile;
返回值如果是 EXCLUSIVE 或 SHARED,说明启用了密码文件验证;如果是 NONE,则只走OS认证(此时orapwd无效,ALTER USER改的只是字典密码,不影响远程SYSDBA登录逻辑)。
- OS认证下:只要你是
dba组(Linux)或ORA_DBA组(Windows)成员,sqlplus / as sysdba永远成功,和SYS字典密码无关 - 密码文件认证下:远程连接
sqlplus sys/xxx@db as sysdba才真正校验密码文件里的哈希值 - 两者可共存,但远程
SYSDBA优先查密码文件,查不到才回落到OS认证(取决于参数和客户端连接方式)
CDB环境下ALTER USER一次生效,但SYS和SYSTEM有本质区别
SYS是公共用户,SYSTEM也是,但SYS的密码同时存于数据字典和密码文件,SYSTEM只存于数据字典。所以:
- 在
CDB$ROOT中执行ALTER USER sys IDENTIFIED BY newpass→ 自动同步到所有PDB,且更新密码文件(如果存在) - 同理执行
ALTER USER system IDENTIFIED BY newpass→ 也同步到所有PDB,但仅更新数据字典,不碰密码文件 - 不能在某个PDB里单独改
SYS密码——会报错ORA-65048: error encountered when processing statement in pluggable database - 改完后已有连接不受影响,新连接才校验新密码;业务系统若硬编码了
SYS/SYSTEM密码,必须同步更新配置
忘记所有密码时,orapwd是唯一能救SYS远程登录的手段
当SYS和SYSTEM密码全忘,又没OS认证权限(比如非dba组用户),只能重建密码文件。注意:orapwd只重置SYS在密码文件中的凭证,对SYSTEM完全无效,也不影响数据字典里已有的SYS密码。
- 命令格式:
orapwd file=(19c建议显式加password= format=12.2 format参数,避免兼容问题) - 路径必须准确指向当前实例的密码文件,常见位置:
$ORACLE_HOME/dbs/orapw(Linux)或%ORACLE_HOME%\database\pwd(Windows).ora - 执行后需重启数据库才能让新密码文件生效(
shutdown immediate; startup) -
orapwd不会改SYSTEM密码,仍需进库后用ALTER USER system IDENTIFIED BY ...补上
最容易被忽略的一点:CDB下改SYS密码看似简单,但如果你的应用依赖远程sqlplus sys/xxx@db as sysdba做自动化运维,而你只改了字典没重建密码文件,或者重建时format版本写错导致无法解析,就会卡在连接阶段——这时候报的错不是ORA-01017,而是更隐蔽的ORA-01031: insufficient privileges,因为密码文件压根没被加载成功。











