开始准备通过实验的方式,把这段日子来看的内容好好的实践一翻。于是乎打开了OEM,却神奇的发现不能用sys用户登录了,与此同时,其他的非sysdba用户可以登录。但是通过sqlplus可以用同样的密码作为sysdba登录,这是怎么一回事呢?
sysdba或sysoper用户的登录有两种方式:一是通过os认证,二是通过密码文件验证。
权限验证的大致顺序如下:
1.根据$ORACLE_HOME/NETWORK/ADMIN下的sqlnet.ora中SQLNET.AUTHENTICATION_SERVICES值来判定是进行os验证还是密码文件验证。 (NTS)表示为os验证;none或文件中没有该参数表示密码文件验证。
2.os验证,根据当前用户的用户组判断是否具有sysdba权限,验证失败则进行密码文件验证
3. 密码文件验证,参数REMOTE_LOGIN_PASSWORDFILE的值以及密码文件是否存在决定个验证的结果
REMOTE_LOGIN_PASSWORDFILE 这个参数10.2的时候可选值有两个NONE,SHARED; 11G开始多了个exclusive(默认值)
shared:One or more databases can use the password file. The password file can contain SYS as well as non-SYS users.
exclusive:The password file can be used by only one database. The password file can contain SYS as well as non-SYS users.
none: Oracle ignores any password file. Therefore, privileged users must be authenticated by the operating system.
按照上面的顺序,先查看sqlnet.ora文件,发现SQLNET.AUTHENTICATION_SERVICES的值为nts,说明当前使用的是os认证。因为目前的认证原因,所以使用错误的密码只要是sys用户也能登录成功。所以猜测这次错误的原因是因为密码错误?
事实上因为很久没碰了,忘记了具体的密码,于是乎更改密码 alter user sys identified by new_password; 这之后再次登录,成功。
该类用户修改密码也有两种方法:
alter user sys identified by new_password;
orapwd file=PWDko.ora password=new_password entries=10 (一旦执行后,该密码文件中删除了除sys用户外的所有用户,对于曾有该权限的用户需要重新赋权)
密码文件的路径:
linux:$ORACLE_HOME/dbs/orapw$ORACLE_SID
windows:$ORACLE_HOME/database/PW%ORACLE_SID%.ora
查看密码文件中数据的状态可以查询v$pwfile_users视图
该表中的数据会随着 grant sysdba to username而自动同步,列出拥有sysdba权限的用户
----------------------------------------------------------------------------------------------------------
翻了一下以前的笔记,曾在使用pl/sql developer时,这方面遇到错误: ORA-01017:invalid username/password;logon denied
分析思路:检查密码-->检查验证方法-->检查REMOTE_LOGIN_PASSWORDFILE-->检查密码文件情况