背景
忘记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家庭版部分版本没有用户组的操作。此时建议使用文件密码的方式修改超级管理员密码。