遠(yuǎn)程服務(wù)器配置可以使得數(shù)據(jù)庫管理員在服務(wù)器以外的主機(jī)上連接到一個(gè)SQL Server實(shí)例,以便管理員在沒有建立單據(jù)連接的情況下在其他的SQL Server實(shí)例上執(zhí)行存儲過程等相關(guān)操作。在遠(yuǎn)程服務(wù)器配置模式下,客戶端所連接發(fā)服務(wù)器接受客戶端的請求,并代表客戶端把這個(gè)請求發(fā)送到遠(yuǎn)程的數(shù)據(jù)庫服務(wù)器。遠(yuǎn)程服務(wù)器執(zhí)行完畢后,會把執(zhí)行報(bào)告返回給原始的服務(wù)器。然后這個(gè)原始服務(wù)器再把結(jié)果傳遞給客戶端。不過在SQL Server中,之所以要實(shí)現(xiàn)這種技術(shù),主要是出于兼容性的需要。出于安全、性能方面的考慮,現(xiàn)在微軟官方是建議數(shù)據(jù)庫管理員通過鏈接服務(wù)器功能來對服務(wù)器進(jìn)遠(yuǎn)程操作。因?yàn)殒溄臃?wù)器可以比遠(yuǎn)程服務(wù)器提供更高的安全性與更好的性能。
一、鏈接服務(wù)器的優(yōu)點(diǎn)。
在遠(yuǎn)程服務(wù)器模式下,客戶端是通過另外一個(gè)SQL Server數(shù)據(jù)庫服務(wù)器連接到遠(yuǎn)程的SQL Server數(shù)據(jù)庫服務(wù)器中。而鏈接服務(wù)器模式下,客戶端是通過鏈接服務(wù)器連接到遠(yuǎn)程的SQL Server數(shù)據(jù)庫服務(wù)器中。也就是說,微軟專門開發(fā)了一個(gè)鏈接服務(wù)器,用來跟遠(yuǎn)程的數(shù)據(jù)庫進(jìn)行鏈接。由于這個(gè)鏈接服務(wù)器是一個(gè)獨(dú)立于SQL Server數(shù)據(jù)庫的服務(wù)器,所以,其性能會比遠(yuǎn)程服務(wù)器配置模式高的多,而且安全性也有所保障。
如鏈接服務(wù)器可以以相同的方式確定不同的數(shù)據(jù)源。如果是遠(yuǎn)程服務(wù)器模式,則在客戶端之能夠鏈接到SQL Server數(shù)據(jù)庫。但是,如果管理員采用了鏈接服務(wù)器的話,那么遠(yuǎn)程客戶端不僅可以訪問SQL Server數(shù)據(jù)庫;而且還可以訪問其他數(shù)據(jù)源,如Oracle、Acess等數(shù)據(jù)庫。當(dāng)管理員需要實(shí)現(xiàn)數(shù)據(jù)遷移,把其他數(shù)據(jù)庫中的數(shù)據(jù)遷移到SQL Server數(shù)據(jù)庫中,將變得非常有用。而且,在鏈接服務(wù)器模式下,管理員還可以對企業(yè)內(nèi)的異類數(shù)據(jù)源發(fā)出分布式查詢、更新等操作。
所以說,鏈接服務(wù)器模式在性能上,比遠(yuǎn)程服務(wù)器模式更勝一籌。那么在安全性上,其又有什么杰出表現(xiàn)呢?
二、登陸名映射提高鏈接服務(wù)的安全性。
如果客戶端通過鏈接服務(wù)器訪問遠(yuǎn)程數(shù)據(jù)庫時(shí),發(fā)送服務(wù)器必須提供登陸名和密碼以代表自己連接到接收服務(wù)器。而這個(gè)過程,是通過SQL Server數(shù)據(jù)庫系統(tǒng)存儲過程實(shí)現(xiàn)的。這種技術(shù),就叫做登錄名映射。
鏈接服務(wù)器登錄名映射為特定的鏈接服務(wù)器和本地登錄名建立遠(yuǎn)程登陸名和遠(yuǎn)程密碼。在客戶端連接到鏈接服務(wù)器以執(zhí)行查詢或者存儲過程時(shí),數(shù)據(jù)庫會查找正在執(zhí)行查詢或者存儲過程的當(dāng)前登錄名的登陸名映射。如果找到一個(gè)合適的登陸名映射時(shí),則數(shù)據(jù)庫在連接到鏈接服務(wù)器時(shí)會發(fā)送相應(yīng)的遠(yuǎn)程登陸名和密碼。這看起來好像是在繞口令,比較難以理解。這也正常。筆者剛接觸到這個(gè)鏈接服務(wù)器時(shí),也想了幾個(gè)小時(shí),才弄明白什么叫做登陸名映射。其實(shí)我們可以簡單的理解。即到客戶端鏈接到鏈接服務(wù)器時(shí),鏈接服務(wù)器需要先對客戶端的身份進(jìn)行驗(yàn)證。而其驗(yàn)證的依據(jù)就是遠(yuǎn)程數(shù)據(jù)庫是與鏈接服務(wù)器建立了登陸名映射。也就說,鏈接服務(wù)器在其中起著“保安”的作用,會先確定訪問者的合法身份。
可見,通過登陸名映射可以在很大程度上提高遠(yuǎn)程數(shù)據(jù)庫服務(wù)的安全性。
三、鏈接服務(wù)器的實(shí)現(xiàn)方式。
鏈接服務(wù)器的部署是非常簡單的。在SQLServer的管理控制臺中,只需要通過幾個(gè)簡單的步驟即可。不過在談具體的配置之前,還必須先要來了解一個(gè)新內(nèi)容,即OLE數(shù)據(jù)庫接口。
上面我們在談到鏈接服務(wù)器性能的時(shí)候,說過管理員可以通過鏈接服務(wù)器來訪問呢不同的數(shù)據(jù)源。其實(shí),這都是OLE數(shù)據(jù)庫接口的功勞。OLE數(shù)據(jù)庫訪問接口是用來管理特定數(shù)據(jù)源并且與其進(jìn)行交互的工具。其實(shí),他是一個(gè)DLL文件,即動(dòng)態(tài)鏈接庫文件。這個(gè)文件往往不能夠單獨(dú)運(yùn)行,但是它允許應(yīng)用程序共享執(zhí)行特殊任務(wù)所必須的代碼和其他內(nèi)容。而OLE數(shù)據(jù)源標(biāo)示可通過OLE來訪問特定的數(shù)據(jù)庫。有了OLE的幫助,使得鏈接服務(wù)器不僅可以訪問各大品牌的數(shù)據(jù)庫,還可以訪問一些非數(shù)據(jù)庫的數(shù)據(jù)文件,如Excel、帶有固定格式的文本文件等等。
而且,OLE接口參數(shù)還可以對某些操作進(jìn)行控制。因?yàn)椴煌臄?shù)據(jù)庫都對標(biāo)準(zhǔn)的SQL語句進(jìn)行了擴(kuò)充。也就是說,某些特殊的語法只有特定的數(shù)據(jù)庫系統(tǒng)才能夠執(zhí)行。為了保證SQL語句的通用性,可以在OLE接口參數(shù)中進(jìn)行一些配置,來防止管理員執(zhí)行一些不兼容的SQL語句。如在OLE接口中,有一個(gè) NestedQueries的參數(shù)。它主要用來控制是否允許在From子句中潛套Select語句。如果把這個(gè)參數(shù)設(shè)置為0,就表示不允許在From子句中使用嵌套的Select語句。如果非0,則表明訪問接口允許在From子句中使用嵌套的Select語句。筆者有時(shí)候經(jīng)常利用這個(gè)參數(shù)來對一些操作進(jìn)行控制。如可以通過這個(gè)選項(xiàng),使得數(shù)據(jù)庫管理員能夠?qū)⒛承┎樵兾薪o需要在From子句中嵌套Select語句的訪問接口。
通過接口還可以控制操作者是否有更新權(quán)限,即通過鏈接服務(wù)器訪問遠(yuǎn)程數(shù)據(jù)庫時(shí),能否對數(shù)據(jù)庫進(jìn)行更新操作。如要進(jìn)行這個(gè)控制,則可以使用 NonTransactedUpdates參數(shù)。如果這個(gè)參數(shù)為0,則允許進(jìn)行更新。反之,則不允許更新。不過如果啟用了更新的話,需要注意一個(gè)問題。由于訪問接口不支持事務(wù),則通過鏈接服務(wù)器更新的數(shù)據(jù),將不可恢復(fù)。
鏈接服務(wù)器可以采用SQL Server自帶的OLE接口,也可以采用第三方的接口。考試大提示如果采用第三方的OLE數(shù)據(jù)庫接口的話,需要注意運(yùn)行SQL Server服務(wù)的帳戶必須具有對安裝訪問接口的目錄以及所有子目錄具有讀取權(quán)限和執(zhí)行權(quán)限。在大部分情況下,筆者建議還是采用數(shù)據(jù)庫自帶的OLE接口,以減少配置的工作量。
四、如何定義鏈接服務(wù)器。
在SQL Server數(shù)據(jù)庫中,鏈接服務(wù)器定義主要有兩種方式。一是通過數(shù)據(jù)庫自帶的存儲過程來進(jìn)行定義;二是通過管理控制臺來進(jìn)行部署。
筆者比較喜歡采用系統(tǒng)存儲過程和目錄視圖來管理鏈接服務(wù)器。如可以通過SP-addlinkedserver存儲過程來創(chuàng)建服務(wù)器定義。如果需要查看鏈接服務(wù)器的信息,則可以通過SYS.SERVERS系統(tǒng)目錄視圖進(jìn)行查詢。如果要?jiǎng)h除鏈接服務(wù)的話,也可以通過存儲過程來刪除。
如果初學(xué)者覺得通過存儲過程與視圖的方式不夠直觀,則可以通過數(shù)據(jù)庫的管理控制臺來進(jìn)行鏈接服務(wù)器的定義。這個(gè)步驟也很簡單。在數(shù)據(jù)庫的對象資源管理器中,右鍵單擊服務(wù)器對象,選擇新建,再選擇鏈接服務(wù)器即可。如果要?jiǎng)h除連接服務(wù),則選中需要?jiǎng)h除的鏈接服務(wù)器,選擇刪除即可。通常情況下,不需要對OLE的接口參數(shù)進(jìn)行調(diào)整。如果對于性能、安全等要求比較高,或者有多個(gè)管理員同時(shí)管理數(shù)據(jù)庫的時(shí)候,則可以通過對OLE部分參數(shù)進(jìn)行調(diào)整。如筆者上面談到的控制是否允許更新等相關(guān)參數(shù)。對于初學(xué)者來說,筆者不建議對這些參數(shù)進(jìn)行調(diào)整。因?yàn)槿绻{(diào)整不得法的話,會導(dǎo)致鏈接服務(wù)器無法正常工作。而且這個(gè)錯(cuò)誤很難排查。
鏈接服務(wù)器除了可以幫助管理員輕松訪問不同的數(shù)據(jù)源之外,在分布式查詢中也特別有用。當(dāng)用戶利用客戶端應(yīng)用程序通過鏈接服務(wù)器執(zhí)行分布式查詢時(shí),數(shù)據(jù)庫將會分析鏈接服務(wù)器傳送過來的語句。行集請求的形式可以是對該訪問接口執(zhí)行查詢或者從該訪問接口直接打開基表。
一、鏈接服務(wù)器的優(yōu)點(diǎn)。
在遠(yuǎn)程服務(wù)器模式下,客戶端是通過另外一個(gè)SQL Server數(shù)據(jù)庫服務(wù)器連接到遠(yuǎn)程的SQL Server數(shù)據(jù)庫服務(wù)器中。而鏈接服務(wù)器模式下,客戶端是通過鏈接服務(wù)器連接到遠(yuǎn)程的SQL Server數(shù)據(jù)庫服務(wù)器中。也就是說,微軟專門開發(fā)了一個(gè)鏈接服務(wù)器,用來跟遠(yuǎn)程的數(shù)據(jù)庫進(jìn)行鏈接。由于這個(gè)鏈接服務(wù)器是一個(gè)獨(dú)立于SQL Server數(shù)據(jù)庫的服務(wù)器,所以,其性能會比遠(yuǎn)程服務(wù)器配置模式高的多,而且安全性也有所保障。
如鏈接服務(wù)器可以以相同的方式確定不同的數(shù)據(jù)源。如果是遠(yuǎn)程服務(wù)器模式,則在客戶端之能夠鏈接到SQL Server數(shù)據(jù)庫。但是,如果管理員采用了鏈接服務(wù)器的話,那么遠(yuǎn)程客戶端不僅可以訪問SQL Server數(shù)據(jù)庫;而且還可以訪問其他數(shù)據(jù)源,如Oracle、Acess等數(shù)據(jù)庫。當(dāng)管理員需要實(shí)現(xiàn)數(shù)據(jù)遷移,把其他數(shù)據(jù)庫中的數(shù)據(jù)遷移到SQL Server數(shù)據(jù)庫中,將變得非常有用。而且,在鏈接服務(wù)器模式下,管理員還可以對企業(yè)內(nèi)的異類數(shù)據(jù)源發(fā)出分布式查詢、更新等操作。
所以說,鏈接服務(wù)器模式在性能上,比遠(yuǎn)程服務(wù)器模式更勝一籌。那么在安全性上,其又有什么杰出表現(xiàn)呢?
二、登陸名映射提高鏈接服務(wù)的安全性。
如果客戶端通過鏈接服務(wù)器訪問遠(yuǎn)程數(shù)據(jù)庫時(shí),發(fā)送服務(wù)器必須提供登陸名和密碼以代表自己連接到接收服務(wù)器。而這個(gè)過程,是通過SQL Server數(shù)據(jù)庫系統(tǒng)存儲過程實(shí)現(xiàn)的。這種技術(shù),就叫做登錄名映射。
鏈接服務(wù)器登錄名映射為特定的鏈接服務(wù)器和本地登錄名建立遠(yuǎn)程登陸名和遠(yuǎn)程密碼。在客戶端連接到鏈接服務(wù)器以執(zhí)行查詢或者存儲過程時(shí),數(shù)據(jù)庫會查找正在執(zhí)行查詢或者存儲過程的當(dāng)前登錄名的登陸名映射。如果找到一個(gè)合適的登陸名映射時(shí),則數(shù)據(jù)庫在連接到鏈接服務(wù)器時(shí)會發(fā)送相應(yīng)的遠(yuǎn)程登陸名和密碼。這看起來好像是在繞口令,比較難以理解。這也正常。筆者剛接觸到這個(gè)鏈接服務(wù)器時(shí),也想了幾個(gè)小時(shí),才弄明白什么叫做登陸名映射。其實(shí)我們可以簡單的理解。即到客戶端鏈接到鏈接服務(wù)器時(shí),鏈接服務(wù)器需要先對客戶端的身份進(jìn)行驗(yàn)證。而其驗(yàn)證的依據(jù)就是遠(yuǎn)程數(shù)據(jù)庫是與鏈接服務(wù)器建立了登陸名映射。也就說,鏈接服務(wù)器在其中起著“保安”的作用,會先確定訪問者的合法身份。
可見,通過登陸名映射可以在很大程度上提高遠(yuǎn)程數(shù)據(jù)庫服務(wù)的安全性。
三、鏈接服務(wù)器的實(shí)現(xiàn)方式。
鏈接服務(wù)器的部署是非常簡單的。在SQLServer的管理控制臺中,只需要通過幾個(gè)簡單的步驟即可。不過在談具體的配置之前,還必須先要來了解一個(gè)新內(nèi)容,即OLE數(shù)據(jù)庫接口。
上面我們在談到鏈接服務(wù)器性能的時(shí)候,說過管理員可以通過鏈接服務(wù)器來訪問呢不同的數(shù)據(jù)源。其實(shí),這都是OLE數(shù)據(jù)庫接口的功勞。OLE數(shù)據(jù)庫訪問接口是用來管理特定數(shù)據(jù)源并且與其進(jìn)行交互的工具。其實(shí),他是一個(gè)DLL文件,即動(dòng)態(tài)鏈接庫文件。這個(gè)文件往往不能夠單獨(dú)運(yùn)行,但是它允許應(yīng)用程序共享執(zhí)行特殊任務(wù)所必須的代碼和其他內(nèi)容。而OLE數(shù)據(jù)源標(biāo)示可通過OLE來訪問特定的數(shù)據(jù)庫。有了OLE的幫助,使得鏈接服務(wù)器不僅可以訪問各大品牌的數(shù)據(jù)庫,還可以訪問一些非數(shù)據(jù)庫的數(shù)據(jù)文件,如Excel、帶有固定格式的文本文件等等。
而且,OLE接口參數(shù)還可以對某些操作進(jìn)行控制。因?yàn)椴煌臄?shù)據(jù)庫都對標(biāo)準(zhǔn)的SQL語句進(jìn)行了擴(kuò)充。也就是說,某些特殊的語法只有特定的數(shù)據(jù)庫系統(tǒng)才能夠執(zhí)行。為了保證SQL語句的通用性,可以在OLE接口參數(shù)中進(jìn)行一些配置,來防止管理員執(zhí)行一些不兼容的SQL語句。如在OLE接口中,有一個(gè) NestedQueries的參數(shù)。它主要用來控制是否允許在From子句中潛套Select語句。如果把這個(gè)參數(shù)設(shè)置為0,就表示不允許在From子句中使用嵌套的Select語句。如果非0,則表明訪問接口允許在From子句中使用嵌套的Select語句。筆者有時(shí)候經(jīng)常利用這個(gè)參數(shù)來對一些操作進(jìn)行控制。如可以通過這個(gè)選項(xiàng),使得數(shù)據(jù)庫管理員能夠?qū)⒛承┎樵兾薪o需要在From子句中嵌套Select語句的訪問接口。
通過接口還可以控制操作者是否有更新權(quán)限,即通過鏈接服務(wù)器訪問遠(yuǎn)程數(shù)據(jù)庫時(shí),能否對數(shù)據(jù)庫進(jìn)行更新操作。如要進(jìn)行這個(gè)控制,則可以使用 NonTransactedUpdates參數(shù)。如果這個(gè)參數(shù)為0,則允許進(jìn)行更新。反之,則不允許更新。不過如果啟用了更新的話,需要注意一個(gè)問題。由于訪問接口不支持事務(wù),則通過鏈接服務(wù)器更新的數(shù)據(jù),將不可恢復(fù)。
鏈接服務(wù)器可以采用SQL Server自帶的OLE接口,也可以采用第三方的接口。考試大提示如果采用第三方的OLE數(shù)據(jù)庫接口的話,需要注意運(yùn)行SQL Server服務(wù)的帳戶必須具有對安裝訪問接口的目錄以及所有子目錄具有讀取權(quán)限和執(zhí)行權(quán)限。在大部分情況下,筆者建議還是采用數(shù)據(jù)庫自帶的OLE接口,以減少配置的工作量。
四、如何定義鏈接服務(wù)器。
在SQL Server數(shù)據(jù)庫中,鏈接服務(wù)器定義主要有兩種方式。一是通過數(shù)據(jù)庫自帶的存儲過程來進(jìn)行定義;二是通過管理控制臺來進(jìn)行部署。
筆者比較喜歡采用系統(tǒng)存儲過程和目錄視圖來管理鏈接服務(wù)器。如可以通過SP-addlinkedserver存儲過程來創(chuàng)建服務(wù)器定義。如果需要查看鏈接服務(wù)器的信息,則可以通過SYS.SERVERS系統(tǒng)目錄視圖進(jìn)行查詢。如果要?jiǎng)h除鏈接服務(wù)的話,也可以通過存儲過程來刪除。
如果初學(xué)者覺得通過存儲過程與視圖的方式不夠直觀,則可以通過數(shù)據(jù)庫的管理控制臺來進(jìn)行鏈接服務(wù)器的定義。這個(gè)步驟也很簡單。在數(shù)據(jù)庫的對象資源管理器中,右鍵單擊服務(wù)器對象,選擇新建,再選擇鏈接服務(wù)器即可。如果要?jiǎng)h除連接服務(wù),則選中需要?jiǎng)h除的鏈接服務(wù)器,選擇刪除即可。通常情況下,不需要對OLE的接口參數(shù)進(jìn)行調(diào)整。如果對于性能、安全等要求比較高,或者有多個(gè)管理員同時(shí)管理數(shù)據(jù)庫的時(shí)候,則可以通過對OLE部分參數(shù)進(jìn)行調(diào)整。如筆者上面談到的控制是否允許更新等相關(guān)參數(shù)。對于初學(xué)者來說,筆者不建議對這些參數(shù)進(jìn)行調(diào)整。因?yàn)槿绻{(diào)整不得法的話,會導(dǎo)致鏈接服務(wù)器無法正常工作。而且這個(gè)錯(cuò)誤很難排查。
鏈接服務(wù)器除了可以幫助管理員輕松訪問不同的數(shù)據(jù)源之外,在分布式查詢中也特別有用。當(dāng)用戶利用客戶端應(yīng)用程序通過鏈接服務(wù)器執(zhí)行分布式查詢時(shí),數(shù)據(jù)庫將會分析鏈接服務(wù)器傳送過來的語句。行集請求的形式可以是對該訪問接口執(zhí)行查詢或者從該訪問接口直接打開基表。