ORACLE在“域”上的問題【轉】

pcsh發表於2009-11-23

檢視G:oracle10.2.0NETWORKADMINsqlnet.ora檔案內容如下:

# sqlnet.ora Network Configuration File: #G:oracle10.2.0NETWORKADMINsqlnet.ora
# Generated by Oracle configuration tools.

# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES=(NONE)

SQLNET.AUTHENTICATION_SERVICES 引數解釋:資料庫的認證方式:

一種是作業系統認證方式;一種是密碼檔案認證方式.

sqlnet.ora檔案中的:SQLNET.AUTHENTICATION_SERVICES= (NTS/NONE)
NTS:
作業系統認證
NONE:
口令檔案認證

NTS:作業系統認證表示只要你登陸到作業系統上的OS使用者在ORA_DBA GROUP裡,你不需要SYSDBA的密碼就可以直接登陸,直接在cmd裡執行
sqlplus "/as sysdba"
即可以以SYSDBA身份登陸資料庫。

NONE:口令檔案認證表示你不能登陸到OS上,但是透過如下方法後可以以SYSDBA身份登登陸資料庫系統裡:建立passwordfile密碼檔案,確保REMOTE_PASSWORDFILE = EXCLUSIVE.這樣就可以透過ORACLE客戶端sqlplusas sysdbaSYSDBA身份登陸到資料庫系統裡。

為了確保rman備份工具能透過os認證登陸到資料庫系統,修改G:oracle10.2.0NETWORKADMINsqlnet.ora檔案內容
SQLNET.AUTHENTICATION_SERVICES=(NONE)
改為:
SQLNET.AUTHENTICATION_SERVICES=(NTS)

這樣ORACLE的本地OS認證就沒問題了,RMAN也能直接透過OS認證登陸資料庫進行備份(不需要提供資料庫密碼)。

但是由於資料庫clientc1跟資料庫伺服器db1(開文件開頭環境說明)不在同一個域,C1庫連線資料庫時報ora-12638 身份證明檢索失敗的錯誤。檢視clientc1G:oracle10.2.0NETWORKADMINsqlnet.ora檔案內容如下:
SQLNET.AUTHENTICATION_SERVICES= (NTS)

檢視METALINKORACLE官方提供的解決方法如下:修改客戶端G:oracle10.2.0NETWORKADMINsqlnet.ora檔案內容
SQLNET.AUTHENTICATION_SERVICES= (NTS)

SQLNET.AUTHENTICATION_SERVICES= (NONE)

問題解決。

Oracle 解釋如下:
Either create trust between the two domains or change the client or

SQLNET.AUTHENTICATION_SERVICES such that NTS in not negotiated in the connection handshake.
NTS is only negotiated if both client and server have SQLNET.AUTHENTICATION_SERVICES
set to NTS.

i.e. SQLNET.AUTHENTICATION_SERVICES=NONE

總結如下:
Site(A, Server)
2003(處於DR1域中), oracle9206(opatch5)
Site(B, Client) windows
環境(2000,2003,處於DR2域中)oracle 資料庫或客戶端

Site(A),Site(B) oraclenetworkadmin目錄下都有檔案sqlnet.ora該檔案中都有這一項 SQLNET.AUTHENTICATION_SERVICES= (NTS)

現象1、當Site(B)以域domain (此域不同於site(A)的域)身份登入機器時,並且Site(A),Site(B) 中的sqlnet.ora 都有這一項 SQLNET.AUTHENTICATION_SERVICES=(NTS) 時,則會出現:

SQL> connect
ERROR:
ORA-12638: Credential retrieval failed


Warning: You are no longer connected to ORACLE.
SQL>

現象2(接上)、此時,若把客戶端Site(B) sqlnet.ora檔案中的這一項 SQLNET.AUTHENTICATION_SERVICES 被註釋掉
#SQLNET.AUTHENTICATION_SERVICES= (NTS)
SQLNET.AUTHENTICATION_SERVICES= (NONE),則均可以正常連線資料庫
SQL> connect

Connected.

現象3、當客戶端Site(B)以本機身份登入時,則不論 Site(B) sqlnet.ora檔案中的這一項 SQLNET.AUTHENTICATION_SERVICES = (NTS) 還是被註釋掉
#SQLNET.AUTHENTICATION_SERVICES= (NTS)
SQLNET.AUTHENTICATION_SERVICES= (NONE),均可以正常連線資料庫
SQL> connect

Connected.

原因:Site(A)Site(B)為不同的域,並且Site(A),Site(B)都採用作業系統認證(NTS)方式,則需要雙方建立信任關係,要不就一方不採用(NTS)認證。如:
SQLNET.AUTHENTICATION_SERVICES=NONE

#SQLNET.AUTHENTICATION_SERVICES=NTS

解決方法:
1
、對兩個域建信任關係(沒測試此方法)
2
、資料庫或客戶端的sqlnet.ora 中的 SQLNET.AUTHENTICATION_SERVICES=(NONE)或被註釋掉 #SQLNET.AUTHENTICATION_SERVICES

[@more@]無

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

相關文章