Oracle数据库用户密码与Linux系统用户密码无关,修改oracle系统账户密码不影响数据库登录;重置SYSTEM/SYS密码需用SQL命令ALTER USER,并注意12c+版本的大小写敏感和密码复杂度要求。
Oracle数据库用户密码和Linux系统用户密码是两回事
很多人在linux里装了oracle,看到有个oracle用户,就以为用passwd oracle能改掉数据库里的sys或system密码——其实完全不是一回事。oracle只是安装数据库软件的操作系统账户,它不控制数据库内部用户的认证逻辑。改它的系统密码,对登录sql*plus、连接数据库毫无影响。
真正要改的是Oracle数据库内的用户密码
比如想重置SYSTEM或SYS密码,必须进数据库执行SQL命令,且需要有相应权限(通常是已登录的DBA用户):
- 先用已有凭证连进数据库:
sqlplus / as sysdba(前提是当前Linux用户是dba组成员,且Oracle监听正常) - 然后运行:
ALTER USER system IDENTIFIED BY new_password; - 如果要重置
SYS,语法一样,但注意:12c及以上版本中SYS密码修改后,远程登录仍需AS SYSDBA身份,不能仅靠密码
常见错误:直接跑passwd oracle后发现SQL*Plus还是连不上——那是因为数据库没重启,也不需要重启;你改的根本不是它认的密码。
什么时候才该用root切到oracle用户并执行passwd
只在以下真实场景有用:
- Linux系统本身无法登录
oracle账号(比如忘了系统密码,导致无法su过去启动监听或数据库) - 需要临时让其他运维人员以
oracle身份操作文件系统(如查日志、改$ORACLE_HOME/network/admin/tnsnames.ora) - 自动化脚本里需确保
oracle用户能SSH免密登录(这时改的是它的/etc/shadow条目)
执行方式就是:sudo su - 切root,再passwd oracle。但这跟数据库登录完全无关,别混淆。
容易被忽略的关键点
Oracle 12c/19c/21c默认启用密码区分大小写,且强制复杂度校验(比如要求含数字+特殊字符)。如果你用ALTER USER设了个简单密码如123,会报ORA-00922: missing or invalid option或ORA-28003: password verification failed。解决方法是临时禁用验证函数:ALTER PROFILE DEFAULT LIMIT PASSWORD_VERIFY_FUNCTION NULL;,改完再恢复。
另外,如果数据库启用了Oracle Wallet或外部认证(如OS_AUTHENT_PREFIX),密码可能根本不起作用——这时候看V$PWFILE_USERS和sqlnet.ora里的SQLNET.AUTHENTICATION_SERVICES配置更实际。











