Oracle作業系統認證

regonly1發表於2009-07-12
預設情況下,在Oracle的主機上(linux系統)的Oracle作業系統使用者下,以sys使用者登陸
資料庫時可以不用輸入密碼直接登入。實際上,只要是屬於dba組(linux)或osdba組
(windows)下,都可以不用密碼進行登入。這是認證方式稱為OS認證。
這種登入方式的控制,是透過$ORACLE_HOME/network/admin/sqlnet.ora中的:
SQLNET.AUTHENTICATION_SERVICES
引數來控制的。有三個值可取:
1、NTS。這個引數是主機作業系統是windows的時候專用的。當在windows上設定該參
數後,即可進行OS認證。需要注意的是,該引數是windows專用的。如果oracle是
裝在unix類系統上,OS認證都會失敗的。
2、NONE。表示不做作業系統認證,即要求輸入密碼。
3、ALL。即所有認證方式都可以。
所以要在主機上進行os認證直接登入sys as sysdba,只要設定為ALL或者不設定該引數(
即註釋掉該行)就行了。
如果要禁止OS認證,則只要設定為NONE即可。
 
題外話:
關於OS認證的,其實一開始與remote_login_passwordfile混淆起來了。
1、OS認證是指主機上安裝Oracle的使用者的管理員登入認證方式。
2、當這個管理員嘗試透過網路來登入Oracle DB時,將會失敗。
(以網路方式登入資料庫,即使透過將非常不安全的引數remote_os_authent設定為true,
作業系統認證也不會生效。)
要允許遠端管理員sys登入資料庫,則要求設定
remote_login_passwordfile = exclusive
然後建立passowrd file:
orapwd file=orapw$ORACLE_SID passwd=passwd entries=10 force=y
需要注意的是這裡的password file檔案命名需要符合特定的這個格式,如果命名不對,系
統將會找不到這個密碼檔案,而產生:
08:38:36 idle> grant sysdba to sys;
grant sysdba to sys
*
ERROR at line 1:
ORA-01994: GRANT failed: password file missing or disabled
上面這個錯誤。也就導致了sysdba或者管理員使用者不能遠端登入資料庫。
要檢查是否已經將sys使用者放入密碼檔案,可以查詢:
08:49:04 idle> select * from v$pwfile_users;
USERNAME     SYSDBA          SYSOPER
---------------       ---------------   -------------------
SYS                    TRUE            TRUE
 
總結:
sqlnet.ora裡面的SQLNET.AUTHENTICATION_SERVICES引數是用於本機sysdba或者
其他管理員使用者登入的。
而remote_login_passwordfile及對應的passwordfile是用於遠端sysdba或者其他管理員
登入的,兩者是獨立的。
 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12932950/viewspace-608912/,如需轉載,請註明出處,否則將追究法律責任。

相關文章