忘记oracle管理员账户的解决办法

926 阅读3分钟

背景

忘记Oracle管理员用户名/密码的情况还是很常见的,通常我们需要修改默认的密码,但是过程还是有些坑啊,下面记录一下踩坑记,方便之后的查阅。

Oracle用户登录的认证方式

Oracle针对普通账户和超级管理员(指sysdba和sysoper)的认证机制不一样,前者是通过数据字典,后者主要是通过操作系统验证和密码文件验证。因此一般提到操作系统认证或密码文件认证,针对的都是超级管理员的认证。

操作系统验证

​ 对于操作系统认证,其实很简单,首先需要确保操作系统用户在ora_dba用户组,这样就可以通过"sqlplus /as sysdba"方式登录。但是事实往往令人意外,如果系统用户不在ora_dba用户组,我们用上述命令登录数据库会报出权限不足的错误ORA-01031: insufficient privileges,如果你是Win10旗舰版你可以把用户添加到用户组来解决权限的问题。

密码文件验证

这种方式其实利用的是orapwd工具创建密码文件首先找到你需要修改的数据库实例,我们这里想要修改是实例是orcltest

其次,确定数据库的安装路径,比如本例为D:\ProgramFiles\oracle11g\app\product\11.2.0\dbhome_1\database,在这个路径下找 database 文件夹,在这个文件夹下有个PWDorcltest.ora 的文件,如果你的实例名称为 XXXX,则这个文件名称为PWDXXXX.ora.

最后,以管理员方式打开cmd窗口,进入到密码文件的文件夹,输入已下命令修改sys的密码为admin,entries参数大概是可以配置几个sysdba用户,并且和操作系统的block size有关,比如操作系统的block size为512字节,entries指定为1的话,我可以给4个用户赋予sysdba或sysoper权限。

 orapwd file=PWDorcltest.ora password=admin entries=10

数据库验证

普通用户可以通过数据字典进行用户验证。

如何修改密码

登录dba账户修改用户密码

sqlplus / as sysdba; -- 已sysdba角色登录,省略了用户名/密码,完整的是sqlplus sys/sysPassword@orcl as sysdba
alter user sys identified by sysPassword; -- 将sys用户的密码修改为sysPassword

如果你不知道管理员账户,且系统账户能通过操作系统认证

sqlplus /nolog;
connect / as sysdba;
alter user sys identified by sysPassword;

如果系统账户没有操作权限,通过修改密码文件修改密码

 orapwd file=PWDorcltest.ora password=admin entries=10

需要注意的是如果当前OS用户不在ora_dba用户组,则会抛出权限不足的错误(ORA-01031: insufficient privileges),此时需要将OS用户添加到用户组中,但是Win10家庭版部分版本没有用户组的操作。此时建议使用文件密码的方式修改超级管理员密码。