关于SYS密码忘记,或者明明正确,却报密码不正确的解决方案

时间:2024-04-15 09:31:47

1      说明

当我们使用PL/SQL工具以SYS用户登录数据库时,发现提示密码不正确:

ORA-01017: invalid username/password; logon denied

怎么办?

2      直接修改登录密码

使用这个方法前,必须和数据库管理员确认,确实是不记得密码了,并且修改之后要告知其余使用人,密码被修改,防止挨骂~~

在数据库服务器,使用sqlplus / as sysdba,通过操作系统认证,直接登录数据库,这里不需要验证密码,然后修改SYS用户密码:

alter user sys identified by oracle;

这里是把SYS用户密码设置成了oracle。

 

3      修改认证方式

Oracle登录验证方式包括口令验证和操作系统认证。

操作系统认证,就是Oracle认为操作系统用户是安全的,在使用sqlplus登录时,不校验用户密码,直接登录。

口令认证,就是指Oracle认为操作系统用户是不安全的,需要通过口令文件进行账号密码验证。Oracle的口令文件一般存放在$ORACLE_HOME/dba/目录下,名字为orapw+sid。

Oracle通过初始化参数remote_login_passwordfile限制口令文件的使用,这里详细介绍下:

1)NONE

remote_login_passwordfile=none表示,登录时禁用口令文件验证,sysdba用户只能通过操作系统认证登录数据库,其他方式的登录,比如PL/SQL,就会报前面提到的ORA-01017错误。

操作系统认证方式涉及sqlnet.ora($ORACLE_HOME/network/admin目录下)中的参数SQLNET.AUTHENTICATION_SERVICES:

a) NONE:关闭操作系统认证,只能通过口令文件认证;----

b) ALL: linux/unix平台下,采用操作系统认证,但远程sysdba登录仍然需要口令文件认证。

c) NTS: windows平台下操作系统认证。

2) EXCLUSIVE

remote_login_passwordfile=exclusive表示,独占模式使用口令文件,这个是默认值,用在单数据库的单实例环境中。这种模式下,可以对sysdba用户进行增加、修改、删除,同时可以修改sysdba用户密码,记录到密码文件中。

查看被授予sysdba权限的用户:

SELECT USERNAME FROM V$PWFILE_USERS WHERE SYSDBA=\'TRUE\';

 

口令文件中添加/删除sysdba权限用户

REVOKE SYSDBA FROM non-SYS-user;

GRANT SYSDBA TO non-SYS-user;

3) SHARED

这种模式下,可以在多个数据库间共享使用口令文件,口令文件不可被修改,包括不能修改sys用户密码。Oracle建议首先将需要sysdba权限的用户在excusive模式下设置好,然后修改remote_login_passwordfile修改为shared共享口令文件。

修改方法:

alter system set remote_login_passwordfile=shared scope=spfile;

然后重启数据库。

 

通过上面分析,我们可以看到,如果PL/SQL登录时,明明密码是正确的,但是就是登录不进去,并且说密码不正确,我们就要在数据库服务器上使用sqlplus登录,然后查看系统参数remote_login_passwordfile是否启动了可口令文件验证,一般应该设置为exclusive。同时关注sqlnet.ora的参数SQLNET.AUTHENTICATION_SERVICES。

4      小结

SYS用户忘记密码,或者明明密码正确,但是登录时报密码错误,不用愁了。