程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL Server中鏈接服務器將替代遠程服務器

SQL Server中鏈接服務器將替代遠程服務器

編輯:關於SqlServer

遠程服務器配置可以使得數據庫管理員在服務器以外的主機上連接到一個SQL Server實例,以便管理員在沒有建立單據連接的情況下在其他的SQL Server實例上執行存儲過程等相關操作。在遠程服務器配置模式下,客戶端所連接發服務器接受客戶端的請求,並代表客戶端把這個請求發送到遠程的數據庫服務器。遠程服務器執行完畢後,會把執行報告返回給原始的服務器。然後這個原始服務器再把結果傳遞給客戶端。不過在SQL Server中,之所以要實現這種技術,主要是出於兼容性的需要。出於安全、性能方面的考慮,現在微軟官方是建議數據庫管理員通過鏈接服務器功能來對服務器進遠程操作。因為鏈接服務器可以比遠程服務器提供更高的安全性與更好的性能。

一、鏈接服務器的優點。

在遠程服務器模式下,客戶端是通過另外一個SQL Server數據庫服務器連接到遠程的SQL Server數據庫服務器中。而鏈接服務器模式下,客戶端是通過鏈接服務器連接到遠程的SQL Server數據庫服務器中。也就是說,微軟專門開發了一個鏈接服務器,用來跟遠程的數據庫進行鏈接。由於這個鏈接服務器是一個獨立於SQL Server數據庫的服務器,所以,其性能會比遠程服務器配置模式高的多,而且安全性也有所保障。

如鏈接服務器可以以相同的方式確定不同的數據源。如果是遠程服務器模式,則在客戶端之能夠鏈接到SQL Server數據庫。但是,如果管理員采用了鏈接服務器的話,那麼遠程客戶端不僅可以訪問SQL Server數據庫;而且還可以訪問其他數據源,如Oracle、Acess等數據庫。當管理員需要實現數據遷移,把其他數據庫中的數據遷移到SQL Server數據庫中,將變得非常有用。而且,在鏈接服務器模式下,管理員還可以對企業內的異類數據源發出分布式查詢、更新等操作。

所以說,鏈接服務器模式在性能上,比遠程服務器模式更勝一籌。那麼在安全性上,其又有什麼傑出表現呢?

二、登陸名映射提高鏈接服務的安全性。

如果客戶端通過鏈接服務器訪問遠程數據庫時,發送服務器必須提供登陸名和密碼以代表自己連接到接收服務器。而這個過程,是通過SQL Server數據庫系統存儲過程實現的。這種技術,就叫做登錄名映射。

鏈接服務器登錄名映射為特定的鏈接服務器和本地登錄名建立遠程登陸名和遠程密碼。在客戶端連接到鏈接服務器以執行查詢或者存儲過程時,數據庫會查找正在執行查詢或者存儲過程的當前登錄名的登陸名映射。如果找到一個合適的登陸名映射時,則數據庫在連接到鏈接服務器時會發送相應的遠程登陸名和密碼。這看起來好像是在繞口令,比較難以理解。這也正常。筆者剛接觸到這個鏈接服務器時,也想了幾個小時,才弄明白什麼叫做登陸名映射。其實我們可以簡單的理解。即到客戶端鏈接到鏈接服務器時,鏈接服務器需要先對客戶端的身份進行驗證。而其驗證的依據就是遠程數據庫是與鏈接服務器建立了登陸名映射。也就說,鏈接服務器在其中起著“保安”的作用,會先確定訪問者的合法身份。

可見,通過登陸名映射可以在很大程度上提高遠程數據庫服務的安全性。

.

三、鏈接服務器的實現方式。

鏈接服務器的部署是非常簡單的。在SQLServer的管理控制台中,只需要通過幾個簡單的步驟即可。不過在談具體的配置之前,還必須先要來了解一個新內容,即OLE數據庫接口。

上面我們在談到鏈接服務器性能的時候,說過管理員可以通過鏈接服務器來訪問呢不同的數據源。其實,這都是OLE數據庫接口的功勞。OLE數據庫訪問接口是用來管理特定數據源並且與其進行交互的工具。其實,他是一個DLL文件,即動態鏈接庫文件。這個文件往往不能夠單獨運行,但是它允許應用程序共享執行特殊任務所必須的代碼和其他內容。而OLE數據源標示可通過OLE來訪問特定的數據庫。有了OLE的幫助,使得鏈接服務器不僅可以訪問各大品牌的數據庫,還可以訪問一些非數據庫的數據文件,如Excel、帶有固定格式的文本文件等等。

而且,OLE接口參數還可以對某些操作進行控制。因為不同的數據庫都對標准的SQL語句進行了擴充。也就是說,某些特殊的語法只有特定的數據庫系統才能夠執行。為了保證SQL語句的通用性,可以在OLE接口參數中進行一些配置,來防止管理員執行一些不兼容的SQL語句。如在OLE接口中,有一個NestedQuerIEs的參數。它主要用來控制是否允許在From子句中潛套Select語句。如果把這個參數設置為0,就表示不允許在From子句中使用嵌套的Select語句。如果非0,則表明訪問接口允許在From子句中使用嵌套的Select語句。筆者有時候經常利用這個參數來對一些操作進行控制。如可以通過這個選項,使得數據庫管理員能夠將某些查詢委托給需要在From子句中嵌套Select語句的訪問接口。

通過接口還可以控制操作者是否有更新權限,即通過鏈接服務器訪問遠程數據庫時,能否對數據庫進行更新操作。如要進行這個控制,則可以使用NonTransactedUpdates參數。如果這個參數為0,則允許進行更新。反之,則不允許更新。不過如果啟用了更新的話,需要注意一個問題。由於訪問接口不支持事務,則通過鏈接服務器更新的數據,將不可恢復。

鏈接服務器可以采用SQL Server自帶的OLE接口,也可以采用第三方的接口。但是,如果采用第三方的OLE數據庫接口的話,需要注意運行SQL Server服務的帳戶必須具有對安裝訪問接口的目錄以及所有子目錄具有讀取權限和執行權限。在大部分情況下,筆者建議還是采用數據庫自帶的OLE接口,以減少配置的工作量。

四、如何定義鏈接服務器。

在SQL Server數據庫中,鏈接服務器定義主要有兩種方式。一是通過數據庫自帶的存儲過程來進行定義;二是通過管理控制台來進行部署。

筆者比較喜歡采用系統存儲過程和目錄視圖來管理鏈接服務器。如可以通過SP-addlinkedserver存儲過程來創建服務器定義。如果需要查看鏈接服務器的信息,則可以通過SYS.SERVERS系統目錄視圖進行查詢。如果要刪除鏈接服務的話,也可以通過存儲過程來刪除。

如果初學者覺得通過存儲過程與視圖的方式不夠直觀,則可以通過數據庫的管理控制台來進行鏈接服務器的定義。這個步驟也很簡單。在數據庫的對象資源管理器中,右鍵單擊服務器對象,選擇新建,再選擇鏈接服務器即可。如果要刪除連接服務,則選中需要刪除的鏈接服務器,選擇刪除即可。通常情況下,不需要對OLE的接口參數進行調整。如果對於性能、安全等要求比較高,或者有多個管理員同時管理數據庫的時候,則可以通過對OLE部分參數進行調整。如筆者上面談到的控制是否允許更新等相關參數。對於初學者來說,筆者不建議對這些參數進行調整。因為如果調整不得法的話,會導致鏈接服務器無法正常工作。而且這個錯誤很難排查。

鏈接服務器除了可以幫助管理員輕松訪問不同的數據源之外,在分布式查詢中也特別有用。當用戶利用客戶端應用程序通過鏈接服務器執行分布式查詢時,數據庫將會分析鏈接服務器傳送過來的語句。行集請求的形式可以是對該訪問接口執行查詢或者從該訪問接口直接打開基表。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved