Remote_login_passwordfile参数探究
口令文件用于具有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密码设置和数据库中数据字典中记载的一致。