口令文件用於具有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密碼設置和數據庫中數據字典中記載的一致。
