口令檔案用於具有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密碼設定和資料庫中資料字典中記載的一致。