Share via


使用特定名稱來識別資料來源

當 OLE DB 資料來源不會被經常參考,因而不保證可設定連結伺服器時,您就可以使用特定名稱來做為資料表參考。在 SQL Server 中,您可以使用 OPENROWSET 與 OPENDATASOURCE 函數來提供特定名稱。

若要控制可存取特定資料來源的人員,只能透過連結伺服器來進行。由於此控制不適用於特定名稱,所以依預設,除了 SQL Server Native Client OLE DB Provider 之外,所有 OLE DB 提供者的特定名稱都會停用。

重要注意事項重要事項

針對 SQL Server 的每個執行個體,系統管理員 (sysadmin) 固定伺服器角色的成員可以使用 DisallowAdhocAccess 提供者選項及 Ad Hoc Distributed Queries 伺服器組態選項,來啟用或停用 OLE DB 提供者的特定連接子名稱。當啟用特定存取時,登入該執行個體的任何使用者都可以執行包含特定連接子的名稱的 SQL 陳述式,連接子名稱會參照可使用 OLE DB 提供者來存取之網路上的任何資料來源。若要控制資料來源的存取權,系統管理員 (sysadmin) 角色的成員可以停用 OLE DB 提供者的特定存取權,進而限制使用者只能存取由系統管理員定義之連結伺服器名稱所參考的資料來源。依預設,會啟用 SQL Server Native Client OLE DB Provider 的特定存取權,並停用所有其他 OLE DB 提供者的特定存取權。

OPENROWSET 及 OPENDATASOURCE 都有提供特定連接資訊。您可以使用這二個函數來指定存取 OLE DB 資料來源所需的所有資訊;然而,您不能交替使用 OPENROWSET 及 OPENDATASOURCE:

  • 每當 OLE DB 提供者藉由指定資料表 (或檢視) 名稱,或藉由指定會傳回資料列集的查詢來傳回資料列集時,您就可使用 OPENROWSET 函數。OPENROWSET 可用來代替 Transact-SQL 陳述式中的資料表或檢視名稱。

  • 唯有當提供者公開資料列集,並使用 catalog**.schema.object 標記法時,才能使用 OPENDATASOURCE。在 Transact-SQL 語法中,可以使用連結伺服器名稱的地方,就可以使用 OPENDATASOURCE。因此,在 catalog.schema.**object 標記法中,OPENDATASOURCE 可做為參考資料表或檢視之四部份名稱的第一部份。

應該只有在無法設定永久性連結伺服器的特定情況下,才使用 OPENROWSET 和 OPENDATASOURCE 來存取外部資料。OPENROWSET 和 OPENDATASOURCE 並沒有提供連結伺服器的所有功能,例如:管理登入對應、查詢連結伺服器之中繼資料的功能,以及設定各種連接設定 (例如逾時值) 的功能。

安全性注意事項安全性注意事項

SQL Server 在連接到另一個資料來源時,會模擬適用於 Windows 驗證登入的登入方式;然而,SQL Server 無法模擬 SQL Server 的驗證登入。因此,若為 SQL Server 驗證登入,SQL Server 可以使用執行 SQL Server 服務之 Windows 帳戶的安全性內容,來存取其他資料來源,例如:檔案、非關聯式資料來源 (如 Active Directory)。這麼做可能會讓這些登入存取他們沒有權限的其他資料來源 (因為執行 SQL Server 服務的帳戶擁有該權限)。當您使用 SQL Server 驗證登入時,應考量這種可能性。

OPENROWSET 和 OPENDATASOURCE 的引數不支援變數。這些引數必須指定成字串常值。如果變數必須當成引數來傳遞,則可用動態方式來建構包含該變數的查詢字串,並使用 EXECUTE 陳述式來執行。