Oracle sqlnet.ora相關認證問題

qinwen740發表於2010-04-30
一、口令認證和作業系統認證

    使用作業系統認證方式的配置過程:
  1. 在作業系統中建立一個合法帳戶。
   具體來說,在NT上:
    首先建立一個本地使用者組,取名為ORA__DBA,其中SID為該資料庫例項的SID,或者建立一個ORA_DBA地組,該組不對 應於任何一個單獨的Oracle例項。這樣當一個NT上有好幾個Oracle例項時,不用分別管理。
   2. NT上建立一個使用者,並且把它歸入該組中。但是實際上這兩步在Oracle8I安裝過程中已經自動完成了,一般不用手動進行。
  3. :在sqlnet.ora(位於$ORACLE_HOME/NETWORK/ADMIN目錄中)中,把  SQLNET.AUTHENTICATION_SERVICES 設定為NTS,意思為使用NT認證方式。
  4.在INIT.ORA中,把REMOTE_LOGIN_PASSWORD設定為NONE,意思是不用password認證方式。
  完成以上步驟後,就可以在登入到NT後,直接在SQL*Plus 和SERVER MANAGER中CONNECT INTERNAL (CONNECT / AS SYSDBA)來作為超級使用者登入到Oracle中,執行一些只有超級使用者才能進行的操作。
    (備註:如果登陸域,該域帳號可能不能使用作業系統認證方式了)

  在Unix下,情況有些不同。畢竟這是兩個完全不同的作業系統。
  首先,在安裝Oracle之前,建立一個DBA組,這一步不用說了,不然是裝不上Oracle的。一般還建立一個名為Oracle的使用者,並把它加入到DBA組中。
  第二步, 設定引數REMOTE_LOGIN_PASSWORD為NONE。在Oracle8.1以後,該引數預設為EXCLUSIVE。一定要記得改過來。
  第三步, 用該使用者名稱登入Unix,執行SQL*Plus 或者SERVER MANAGER,輸入以下命令:CONNECT INTERNAL (CONNECT / AS SYSDBA)來登入到Oracle中。

    備註:經過自己試驗,其實將REMOTE_LOGIN_PASSWORD設定為EXCLUSIVE一樣可以使用作業系統認證,可能這種時候,即可以本機用 sys登陸管理,也可以遠端用connect string的方式以sys使用者登陸管理。

  使用password檔案認證的具體步驟:
  Oracle提供orapwd實用程式來建立password 檔案,運用orapwd建立該認證方式的具體步驟如下:
  1. 使用Orapwd實用程式來建立一個PASSWORD檔案。語法:
   orapwd file=檔名 password=internal使用者密碼 entried=entries.
  詳細解釋:
 
    檔名要包含完整的全路徑名,如果不指定,Oracle把它預設放置$ORACLE_HOME/dbs(Unix下)或者$ORACLE_HOME/DATABASE(NT下)下。
  使用者密碼是使用者internal的密碼。當然後來還可以再向裡邊加入別的超級使用者。
  Entries表示最大允許有的超級使用者數目。這個是一個可選的。前兩者是必須指定的。一般會把它設定的比實際需要大一些,以免不夠。

  2. 把INIT.ORA中REMOTE_LOGIN_PASSWORD設定為EXCLUSIVE 或SHARED.使用EXCLUSIVE表示只有當前INSTANCE使用這個password檔案。而且允許有別的使用者作為sysdba登入進系統裡 邊,而若選擇了SHARED,則表明不止一個例項使用這個密碼檔案,伴隨著一個很強的約束:sysdba許可權只能授予sys和internal這兩個使用者 名。(其實internal不是一個實際使用者,而只是sys作為sysdba登入時的一個別名。)
  同時還要記得把sqlnet.ora檔案中SQLNET.AUTHENTICATION_SERVICES設定為NONE。一般在Unix下它是預設 設定。在NT下,若選擇典型安裝時,會使用OS認證,而自定義時會使用密碼檔案認證方式。在安裝過程中會提示輸入INTERNAL密碼。這樣的話,就不用 在手工建立密碼檔案和設定INTERNAL的密碼了。

  3. 用SQL*Plus 或SERVER MANAGER執行下面命令登入進系統:CONNECT INTERNAL/密碼。

  注意:
  1.在Oracle8.1.6安裝在WIN2000下建立資料庫時,常常會發生憑證檢索失敗的錯誤。這是由於Oracle不能應用OS認證的結果。一 般可以通過修改sqlnet.ora中SQLNET.AUTHENTICATION _SERVICES為NONE來解決。這時,Oracle將採用密碼檔案認證方式。

  2.由於Oracle有幾個系統預建的使用者,所以最好在安裝完成以後馬上改變這些使用者的密碼。系統預設得密碼分別為:internal/oracle , sys/change_on_install, system/manager.

   3.當選擇密碼檔案認證方式時,可以再向系統中加入其他超級使用者。比如用以下語句把使用者SCOTT加入超級使用者之中:(由具有sysdba許可權的人執行)

        SQL>GRANT SYSDBA TO SCOTT;這樣SCOTT使用者就具有了sysdba許可權。注意,此時SCOTT使用者可以以兩種身份登入:SCOTT , SYS.當SCOTT在登入時沒有輸入AS SYSDBA時,SCOTT是作為普通使用者登入的。而當登入時輸入了AS SYSDBA時,此時SCOTT登入進去的使用者實際上為sys。

  4. 當前系統中的具有sysdba許可權的使用者名稱可以從資料字典檢視v$pwfile_users中查詢得到: SELECT * FROM V$PWFILE_USERS;
   
    5. 系統中最大的具有sysdba許可權的使用者數由建立密碼檔案時的ENTRIES引數決定。當需要建立更多的具有sysdba許可權的使用者時,就需要刪除原有的 密碼檔案,重新建立一個。這需要關閉資料庫,刪除密碼檔案,重新建立一個新的密碼檔案,在entries中輸入足夠大的數目。再啟動Oracle。這時, 所有原來被授權的超級使用者都不再存在,需要重新授權。所以在重新建立密碼檔案前,先要查詢該檢視,記下使用者名稱,再在建立完密碼檔案後重新授權。

  6. Internal使用者密碼忘記的處理方法:
  有兩種辦法:
  a. ALTER USER SYS IDENTIFIED BY 新密碼;//這同時也改變了Internal的密碼
  b. 重新建立一個新的密碼檔案,指定一個新的密碼。

   remote_login_passwordfile = shared的含義
 
  
我們看一下Oracle9i文件中的說明:
  SHARED:   More than one database can use a password file. However, the only user recognized by the password file is SYS.
   
意思是說多個資料庫可以共享一個口令檔案,但是隻可以識別一個使用者:SYS

  那麼你可能會有這樣的疑問,多個Exclusive的資料庫是否可以共享一個口令檔案(orapw)呢?

  實際上是這樣的: Oracle資料庫在啟動時,首先查詢的是orapw的口令檔案,如果該檔案不存在,則開始查詢,orapw的口令檔案如果口令文 件命名為orapw,多個資料庫就可以共享.

二、NAMES.DEFAULT_DOMAIN引數
 
在 使用者輸入sqlplus system/manager@test後,sqlplus程式會自動到sqlnet.ora檔案中找NAMES.DEFAULT_DOMAIN引數,假 如該引數存在,則將該引數中的值取出,加到網路服務名的後面,即此例中你的輸入由sqlplus system/manager@test自動變為sqlplus system/manager@test.server.com ,然後再到tnsnames.ora檔案中找test.server.com網路服務名,這當然找不到了,因為該檔案中只有test網路服務名,所以報 錯。解決的辦法就是將sqlnet.ora檔案中的NAMES.DEFAULT_DOMAIN引數註釋掉即可,如 #NAMES.DEFAULT_DOMAIN = server.com。假如NAMES.DEFAULT_DOMAIN引數不存在,則sqlplus程式會直接到tnsnames.ora檔案中找 test網路服務名,然後取出其中的host,port,tcp,service_name,利用這些資訊將連線請求傳送到正確的資料庫伺服器上。
在windows平臺上安裝資料庫時,常常會根據登陸的域名自動將sqlnet.ora檔案中的names.default_domain引數設定為域名。

三、 name.directory_path引數

客戶端的sqlnet.ora 有一個功能,說明連線的字串是基於主機命名還是本地命名方法,就是使用這個引數。


四、 設定IP保護
如果要在網路上做一些IP地址的限制,一般情況下我們首先想到的是用網路層的防火牆軟體。要找網管來設定。但是如果網管不在,或者僅僅想在資料庫層來實現IP地址的限制,DBA們只要修改Server端的一個網路配置檔案sqlnet.ora檔案就可以了。
    
  tcp.validnode_checking=yes
  #允許訪問的ip
  tcp.invited_nodes =(ip1,ip2,……)
  #不允許訪問的ip
  tcp.excluded_nodes=(ip1,ip2,……)

修改sqlnet.ora後,重新啟動listener服務,改動就可以生效了。
如果我們從未允許的IP客戶端連線過來,會出現以下錯誤:

 ERROR: ORA-12537: TNS: 連線已關閉
     
這種在Oracle網路層實現客戶端IP訪問限制的方法在防火牆後面的公司內部網或者託管機房的內部網裡可以採用。

五.SQLNET.INBOUND_CONNECT_TIMEOUT 引數

 
SQLNET.INBOUND_CONNECT_TIMEOUT is set to a value in seconds and
determines how long a client has to provide the necessary authentication information to a database.

即表示客戶端向資料庫提交提供必要的認證資訊的超時時間限制,這個引數常常和ORA-3136錯誤有關。

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

相關文章