口令文件用于具有sysdba身份的用户执行远程登录数据库,Oracle允许用户通过口令文件验证,在数据库未启动之前登录,从而启动实例,加载打开数据库;Oracle通过一个初始化参数remote_login_passwordfile限制口令文件的使用,通过配置该参数可以控制是否在多个数据之间共享密码文件,也可以通过这个参数禁用口令文件验证,remote_login_passwordfile的值:


==> NONE:禁用口令文件验证。

1.设置成none将直接禁用口令文件验证,sysdba用户只能通过操作系统认证登录数据库。此时的登录将会收到报错:


​ORA-01017: invalid username/​​​​password​​​​; logon denied​


2.操作系统认证方式涉及sqlnet.ora 文件中的SQLNET.AUTHENTICATION_SERVICES参数值:

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

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

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


==> EXCLUSIVE:(默认值)独占模式使用密码文件,官档中提到了“only one instance of one database”使用exclusive方式,在数据库中是可以执行对于sysdba用户的增加,修改,删除动作的,同样也可以修改sysdba用户的密码,这些更改会记录到密码文件中去。

1.查看被授予sysdba权限的用户

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


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

REVOKE SYSDBA FROM non-SYS-user;
GRANT SYSDBA TO non-SYS-user;


==> SHARED:在多个数据库间共享口令文件。

1.配置shared值的口令文件可以被一台服务器上的多个数据库或者RAC集群数据库共享;(现在知道exclusive模式时说的“only one instance of one database“的含义了吧,就是为了区分RAC环境)

2.shared下的密码文件不可被修改,这就意味着无法再授权sysdba权限给非sys用户了,修改sysdba权限用户的密码也不被允许,包括sys用户的密码。


​SQL> show parameter ​​​​password​


​NAME​​​                                 ​​TYPE        VALUE​

​------------------------------------ ----------- ------------------------------​

​remote_login_passwordfile            string      SHARED​


​SQL> ​​​​grant​​​ ​​sysdba ​​​​to​​​ ​​hr;​

​grant​​​ ​​sysdba ​​​​to​​​ ​​hr​

​*​

​ERROR ​​​​at​​​ ​​line 1:​

​ORA-01999: ​​​​password​​​ ​​file cannot be updated ​​​​in​​​ ​​SHARED mode​


​SYS@db11g>​​​​alter​​​ ​​user​​​ ​​sys identified ​​​​by​​​ ​​netpwd ;​

​alter​​​ ​​user​​​ ​​sys identified ​​​​by​​​ ​​netpwd​

​*​

​ERROR ​​​​at​​​ ​​line 1:​

​ORA-28046: ​​​​Password​​​ ​​change ​​​​for​​​ ​​SYS disallowed​


3.oracle建议首先将需要sysdba权限的用户在exclusive模式下设置好在将REMOTE_LOGIN_PASSWORDFILE 修改为shared共享口令文件。

4.Oracle寻找口令文件的顺序:orapw$ORACLE_SID --> orapw --> Failure


【示例】Exclusive转变为shared:

1.修改口令文件名

$ mv orapwdb11g orapw

2.修改数据库remote_login_passwordfile值

SQL> alter system set remote_login_passwordfile=shared scope=spfile;

3.重启数据库生效

SQL> shutdown immediate;
SQL> startup;

备注:如果将none的口令文件转换为exclusive或shared,要保证口令文件中的sys密码设置和数据库中数据字典中记载的一致。