連結伺服器的安全性

在連結伺服器連接期間 (例如,當它在處理分散式查詢時),傳送端伺服器會提供一個登入名稱與密碼來代表它本身,以連接到接收端伺服器。為了讓這個連接運作,您必須使用 SQL Server 系統預存程序在連結伺服器之間建立登入對應。

連結伺服器的登入對應可以使用 sp_addlinkedsrvlogin 來新增,以及使用 sp_droplinkedsrvlogin 來移除。連結伺服器登入對應會為指定的連結伺服器與本機登入,建立遠端登入與遠端密碼。當 SQL Server 連接到連結伺服器以執行分散式查詢或預存程序時,SQL Server 會尋找正在執行查詢或程序之現行登入的任何登入對應。若有登入對應的話,SQL Server 會在連接到連結伺服器時傳送對應的遠端登入與密碼。

例如,連結伺服器 S1 的對應已設定為從本機登入 U1 對應到遠端登入 U2,而使用的遠端密碼為 8r4li034j7$。當本機登入 U1 執行分散式查詢來存取儲存於連結伺服器 S1 的資料表時,U2 與 8r4li034j7$ 便會在 SQL Server 連接到連結伺服器 S1 時,當做使用者識別碼與密碼來傳遞。

連結伺服器設定的預設對應為模擬登入的現有安全憑證。這種對應也稱為自我對應。使用 sp_addlinkedserver 新增連結伺服器時,便會為所有本機登入新增預設的自我對應。如果可以使用安全性帳戶委派,而且連結伺服器也支援「Windows 驗證」,則可支援 Windows 驗證登入的自我對應。

[!附註]

請盡可能使用 Windows 驗證。

如果用戶端或傳送端伺服器上不能使用安全性帳戶委派,或連結伺服器/提供者無法辨認「Windows 驗證模式」,則自我對應便不適用於使用「Windows 驗證」的登入。因此,您必須設定一個本機登入,從使用「Windows 驗證」的登入對應到連結伺服器上之非 Windows 驗證的特定登入。在此情況下,如果連結伺服器是 SQL Server 執行個體的話,則遠端登入會使用「SQL Server 驗證」。

分散式查詢必須遵從由遠端資料表上的連結伺服器授予遠端登入的權限。但是,SQL Server 不會在編譯的時候執行任何的權限驗證。任何違反使用權限的情形都在查詢執行階段時偵測,並由提供者做出報告。

[!附註]

若要在連結的伺服器上使用資料表時建立最佳查詢計畫,查詢處理器必須具有連結伺服器的資料分佈統計資料。對於資料表之任何資料行擁有受限權限的使用者可能沒有足夠的權限來取得所有有用的統計資料,而且可能會收到效率較低的查詢計畫並遇到效能不佳的情況。如果連結的伺服器是 SQL Server 執行個體,則使用者必須擁有資料表,或者使用者必須是連結伺服器之系統管理員 (sysadmin) 固定伺服器角色、db_owner 固定資料庫角色或 db_ddladmin 固定資料庫角色的成員,才能取得所有可用的統計資料。

測試連結伺服器

在 [物件總管] 中,以滑鼠右鍵按一下連結伺服器,然後按一下 [測試連接]