標籤:
Oracle登入的時候有兩種認證方式,一種是“作業系統認證”,一種是“口令檔案認證”。
1、當採取作業系統認證的時候,在本地用任何使用者都可以以sysdba登陸;(預設)
2、當採取口令檔案認證的時候,就不是任何使用者都可以用sysdba登陸了,這個時候必須輸入正確的使用者名稱口令才可以(其實這種方法才是安全的)
3、至於你本地的到底採用哪種認證方式,是可以通過parameter來設定的。
ORACLE資料庫通過sqlnet.ora檔案中的參數sqlnet.authentication_services,參數檔案中的remote_login_passwordfile和口令檔案pwdsid.ora三者協同作用實現身份認證.
Sqlnet.authentication_services=(NTS)|(NONE)
NTS:作業系統認證方式,不使用口令檔案;
NONE:口令檔案認證方式
Remote_login_passwordfile=(NONE)|(EXCLUSIVE)|(SHARED)
NONE:不使用口令檔案,作業系統認證;
EXCLUSIVE:口令檔案認證方式,但只有一個資料庫執行個體可以使用此檔案;
SHARED:口令檔案認證方式,可以有多個資料庫執行個體可以使用此檔案,但此設定下只有SYS帳號能被識別,即使檔案中存在其他使用者的資訊,也不允許他們以SYSOPER/SYSDBA登入.
(1).sqlnet.authentication_services=(NTS)
同時Remote_login_passwordfile=(NONE),此時為作業系統認證方式.
當以oracle_dba組下的使用者登入進入本地的作業系統後,進行以下操作:
sqlplus /nolog
SQL>conn /assysdba
可以以sysdba身份登入成功,進行資料庫方面的操作.
當以遠程進行登入時,執行:
sqlplus /nolog
SQL>conn /assysdba
則會顯示:
ERROR:ORA-01031:insufficient privileges
即不允許以sysdba身份遠程登入系統,這也是OS認證這所以稱為本地認證方式的原因.
(2).Sqlnet.authentication_services=(NONE),同時
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令檔案PWDsid.ora,此時為口令檔案認證方式:
當在本地以oracle_dba組下的使用者登入進入系統時,進行以下操作:
sqlplus /nolog
SQL>conn /assysdba
則會顯示:
ERROR:ORA-01031:insufficient privileges
在本地或遠程進行下邊的操作:
sqlplus /nolog
SQL>conn sys/密碼@服務名assysdba
可以進入系統,也就是說口令檔案認證方式允許使用者從本地或遠程以sysdba身份登入,但必須提供口令字.
(3).Sqlnet.authentication_services=(NTS),同時
Remote_login_passwordfile=(EXCLUSIVE)|(SHARED),配合口令檔案PWDsid.ora,此時為作業系統認證和口令檔案認證同時起作用:
當在本地以oracle_dba組下的使用者登入進入作業系統後,進行下邊的操作:
sqlplus /nolog
SQL>conn /assysdba
可以進入系統.即作業系統認證方式登入成功.
當在遠程執行:
sqlplus /nolog
SQL>conn sys/密碼@服務名assysdba
同時可正常登入到資料庫系統,即口令檔案認證方式登入成功.
附:要知道以下幾種登陸方式不是一種概念
sqlplus /nolog
1: conn
/assysdba 本機登陸,使用作業系統認證,有無監聽都可以
2: conn sys/password
assysdba本機登陸,使用密碼檔案認證,有無監聽都可以
3: conn sys/[email protected]
assysdba 可以本機可以遠程,使用密碼檔案認證,必須有監聽,必須有tnsnames.ora,remote_login_passwordfile必須是EXCLUSIVE-----------------------------------------------------------------------------------------------------------------
***特別注意***(
C:\>sqlplus "/as sysdba"
SQL*Plus:Release 10.2.0.1.0 - Production on Fri Nov 2 16:16:22 2007
Copyright (c) 1982, 2005, Oracle. All right reserved.
ERROR:
ORA-01031: insufficient privileges
Enter user-name:
這個錯誤一般是由於oracle登入認證出現了問題:
Oracle登入認證有兩種方式,基於作業系統的登入認證,基於oracle的驗證。
可以通過改變sqlnet.ora檔案,可以修改oracle登入認證方式:
SQLNET.AUTHENTICATION_SERVICES= (NTS)是基於作業系統驗證;SQLNET.AUTHENTICATION_SERVICES= (NONE)是基於Oracle驗證;SQLNET.AUTHENTICATION_SERVICES= (NONE,NTS)是二者共存。
經過測試,以上規則只適用於windows伺服器,在linux下規則如下:
預設情況下linux下的oracle資料庫sqlnet.ora檔案沒有SQLNET.AUTHENTICATION_SERVICES參數,此時是基於作業系統認證和oracle密碼驗證共存的,加上SQLNET.AUTHENTICATION_SERVICES參數後,不管SQLNET.AUTHENTICATION_SERVICES設定為NONE或者NTS,都是基於oracle密碼驗證的。
Windows下設定oracle登入驗證為作業系統驗證方式的方法:
1:把os使用者加到ora_dba組
2:設定sqlnet.ora SQLNET.AUTHENTICATION_SERVICES = (NTS)
或者你可以重建口令檔案來改密碼,只不過原來授予sysdba和sysoper許可權的使用者,就不再具有這2個許可權了。
有一種oracle的登入方式是作業系統驗證登入方式,即常說的OS驗證登入方式,在SQL server中也有這種方式。
當用Windows的系統管理員帳戶登陸系統後登陸資料庫,只要加上 as sysdba,不管用什麼使用者名稱和密碼登陸,都正確,因為這時系統已經忽略了/ 兩邊的使用者名稱和密碼,預設就是sys使用者。
有些朋友經常使用connect / as sysdba登入,但不知道為什麼沒有提供使用者名稱和密碼就得到了sysdba的許可權。還認為這樣是不是不安全呢?
Oracle在常見的多使用者作業系統上都可以進行OS認證方式來登入。例如solaris,windows等等。
下面以常見的windows作業系統來說明看一下這個作業系統認證方式登入的原理。如果你的機器可以使用connect / as sysdba擷取sysdba的許可權,那麼下面的每一個過程你的機器上都會得到驗證,如果不能,按照下面的操作更改後,你也能以這種方式登入。
- 在命令列下敲入compmgmt.msc 進入電腦管理
- 選擇本機使用者和組—>組
- 看是不是有一個組的名字叫做ORA_DBA
- 雙擊改組可以看到裡面是不是有administrator使用者
- 想一想你是不是以administrator使用者登入的呢?
- 再進入Oracle安裝目錄(即$ORACLE_HOME 一般是D:"oracle)"ora92"network"admin 找到sqlnet.ora檔案看看裡面的是不是有SQLNET.AUTHENTICATION_SERVICES= (NTS)
- 如果這些都對的話,你就能已作業系統認證的方式(connect / as sysdba)來登入Oracle
接下來的問題是,如果你的資料很重要,出於安全考慮,希望禁止這種作業系統認證的方式。那麼該怎麼做呢?
很簡單,找到在剛才的第6步驟中的sqlnet.ora檔案,將SQLNET.AUTHENTICATION_SERVICES= (NTS)改為SQLNET.AUTHENTICATION_SERVICES=none即可。你再試一下看看會不會得到到如下結果:
ERROR:
ORA-01031: insufficient privileges
警告: 您不再串連到 ORACLE。
oracle 認證方式