在Oracle Database 11g的日常管理与维护中,密码管理是确保数据库安全性的基石,无论是普通用户更新自己的登录凭证,还是数据库管理员(DBA)重置其他用户(包括高权限用户)的密码,掌握正确的修改方法都至关重要,本文将系统、详尽地介绍在Oracle 11g环境中修改密码的多种场景、具体步骤以及相关的最佳实践,旨在为数据库管理人员提供一份清晰、实用的操作指南。

使用ALTER USER命令修改密码
ALTER USER是Oracle数据库中用于修改用户属性的核心SQL命令,同时也是更改密码最常用、最直接的方法,根据操作者的身份和权限,具体应用场景可分为以下两种。
用户修改自己的密码
当用户知道当前密码,并希望更换为一个新密码时,可以自行执行此操作,这是最简单快捷的场景。
前提条件:
- 用户已成功连接到数据库。
- 用户知道自己的当前密码(在某些情况下,如果配置了密码验证函数,可能需要提供旧密码)。
操作步骤:
- 使用SQL*Plus或其他数据库客户端工具,以当前用户身份登录数据库。
SQL> conn scott/tiger 已连接。
- 执行
ALTER USER命令,其标准语法结构为:ALTER USER <当前用户名> IDENTIFIED BY <新密码>;
- 用户
scott希望将其密码从tiger修改为newlion123,可以执行:SQL> ALTER USER scott IDENTIFIED BY newlion123;
命令执行成功后,系统会提示“用户已更改”,下次登录时,就必须使用新密码
newlion123。
注意: 如果数据库启用了密码验证函数(如UTL_VALIDATE),新密码必须符合预设的复杂性规则(如长度、包含数字、字母和特殊字符等),否则修改会失败。
DBA修改其他用户的密码
数据库管理员拥有ALTER USER系统权限,可以修改数据库中任何用户的密码,这在用户忘记密码或需要进行安全审计时非常有用。
前提条件:
- 操作者必须拥有
ALTER USER系统权限,通常由DBA角色(如SYS,SYSTEM)的用户执行。
操作步骤:

- 以具有DBA权限的用户身份登录数据库。
SQL> conn system/manager 已连接。
- 执行
ALTER USER命令,语法与用户自改相同,但需指定目标用户名。ALTER USER <目标用户名> IDENTIFIED BY <新密码>;
- DBA将用户
hr的密码重置为temp_hr_2025:SQL> ALTER USER hr IDENTIFIED BY temp_hr_2025;
高级用法:强制用户在下次登录时修改密码
出于安全考虑,DBA在重置用户密码后,通常会强制该用户在首次登录时自行设置一个新密码,这可以通过PASSWORD EXPIRE子句实现。
SQL> ALTER USER hr IDENTIFIED BY temp_hr_2025 PASSWORD EXPIRE;
当用户hr下次使用temp_hr_2025登录时,系统会立即提示其密码已过期,并要求输入一个新密码后才能继续使用数据库。
重置最高权限用户(SYS/SYSTEM)的密码
忘记SYS或SYSTEM等最高权限用户的密码是一个棘手但并非无法解决的问题,解决此问题的关键在于利用操作系统的身份认证,绕过密码验证直接以SYSDBA身份连接数据库。
前提条件:
- 必须能够以安装Oracle数据库的操作系统用户(如Linux下的
oracle用户)登录服务器。 - 该用户必须属于相应的操作系统用户组(如
dba组),具备SYSDBA权限。
操作步骤:
-
通过操作系统认证,以
SYSDBA身份连接数据库,这是整个流程的核心。 在Linux/Unix服务器上,打开终端,执行以下命令:$ sqlplus / as sysdba
在Windows服务器上,可以在命令提示符中执行相同的命令,系统将直接以
SYS用户、SYSDBA角色登录,无需输入密码。 -
成功连接后,数据库可能处于未打开状态,首先检查并确保数据库处于打开状态。
SQL> SELECT status FROM v$instance;
如果状态不是
OPEN,则执行启动命令:
SQL> STARTUP;
-
使用标准的
ALTER USER命令为SYS或SYSTEM用户设置新密码。-- 修改SYS用户密码 SQL> ALTER USER sys IDENTIFIED BY YourNewStrongPassword; -- 修改SYSTEM用户密码 SQL> ALTER USER system IDENTIFIED BY AnotherNewPassword;
将
YourNewStrongPassword替换为您想设置的新密码,命令执行成功后,最高权限用户的密码即被重置。
密码管理的重要考量与最佳实践
仅仅知道如何修改密码是不够的,理解其背后的机制和安全策略同样重要。
- 密码大小写敏感性: 从Oracle 11g Release 1开始,密码默认是大小写敏感的,这由初始化参数
sec_case_sensitive_logon控制(默认为TRUE),在处理密码问题时,请务必检查Caps Lock键的状态。 - 密码复杂性验证: 为增强安全性,强烈建议启用密码验证函数,Oracle提供了一个默认的脚本
utlpwdmg.sql(位于$ORACLE_HOME/rdbms/admin/目录下),执行该脚本可以创建一个验证函数,并将其应用到默认的PROFILE中,从而强制用户密码必须符合特定长度、包含字符类型等规则。 - 密码文件的使用: 当需要通过网络以
SYSDBA或SYSOPER身份进行远程管理时,数据库会使用密码文件进行认证,密码文件通过orapwd工具创建,如果忘记了SYS的密码且无法通过操作系统认证,可能需要重新生成密码文件。
为了更直观地对比不同场景下的修改方法,请参考下表:
| 场景描述 | 所需权限/条件 | 核心命令 | 备注 |
|---|---|---|---|
| 用户修改自己的密码 | 用户已登录,知道旧密码 | ALTER USER username IDENTIFIED BY new_password; |
需遵守密码复杂度策略 |
| DBA修改普通用户密码 | 拥有ALTER USER系统权限 |
ALTER USER target_user IDENTIFIED BY new_password; |
可使用PASSWORD EXPIRE强制用户下次修改 |
| 重置SYS/SYSTEM密码 | 操作系统认证权限(SYSDBA) |
sqlplus / as sysdbaALTER USER sys IDENTIFIED BY new_pwd; |
最关键的一步是通过OS认证登录,无需旧密码 |
相关问答 (FAQs)
问题1:我只是一个普通应用用户,忘记了我的Oracle数据库密码,我该怎么办?
解答: 作为普通用户,您没有权限自行重置密码,您唯一且正确的做法是联系您所在团队或公司的数据库管理员(DBA),向DBA说明情况,他们拥有ALTER USER权限,可以为您生成一个临时密码,并可能设置PASSWORD EXPIRE选项,让您在首次登录时自行修改为个人专属的新密码。
问题2:我确信新密码是正确的,但执行ALTER USER命令时总是报错“ORA-28003: password verification for the specified password failed”,这是为什么?
解答: 这个错误明确表示您设置的新密码未能通过数据库的密码复杂性验证,这通常是因为您的数据库启用了密码验证函数(如UTL_VALIDATE.PASSWORD_VERIFY_FUNCTION),您需要检查并确保新密码符合以下一种或多种规则:
- 长度: 密码长度可能不够(要求至少8个字符)。
- 字符类型: 密码可能缺少必需的字符类型(必须同时包含大写字母、小写字母、数字和特殊字符)。
- 包含用户名: 密码中不能包含用户名或服务器名。
- 与旧密码相似: 新密码不能与旧密码过于相似。
建议您与DBA确认当前数据库的
PROFILE所设定的具体密码策略,然后按照要求设置一个更复杂的密码。