在 SQL Server 中啟用跨資料庫存取 (ADO.NET)
更新: November 2007
當一個資料庫中的程序是依照另一個資料庫中的物件而定時,就會發生跨資料庫擁有權鏈結。跨資料庫擁有權鏈結的運作方式與單一資料庫內的擁有權鏈結相同,但未中斷的擁有權鏈結需要所有的物件擁有者都對應至相同的登入帳戶。如果來源資料庫中的來源物件以及目標資料庫中的目標物件是由相同的登入帳戶所擁有,則 SQL Server 不會檢查目標物件上的權限。
預設關閉
從 SQL 2000 SP3 開始,跨資料庫的擁有權鏈結預設會關閉。Microsoft 建議您停用跨資料庫的擁有權鏈結,因為這項功能會使您暴露於下列的安全性風險:
資料庫擁有者、db_ddladmin 的成員或者 db_owners 資料庫角色都可以建立由其他使用者擁有的物件。這些物件可能會以其他資料庫中的物件為目標。這表示如果啟用跨資料庫的擁有權鏈結,則必須完全信任這些使用者使用所有資料庫中的資料。
具有 CREATE DATABASE 權限的使用者可以建立新的資料庫及附加現有的資料庫。如果啟用跨資料庫擁有權鏈結,這些使用者即可從其新建立或附加的資料庫,存取其他資料庫中他們可能並不擁有權限的物件。
啟用跨資料庫擁有權鏈結
只有在可以完全信任高權限使用者的環境中,才應該啟用跨資料庫擁有權鏈結。這項功能可在所有資料庫的安裝期間設定,或者使用 Transact-SQL 命令 sp_configure 和 sp_dboption 選擇性地針對特定的資料庫設定。
SQL Server 2000 SP3 中引進 Cross DB Ownership Chaining 選項做為安全性加強功能,可用來設定跨資料庫擁有權鏈結。若要在 SQL Server 2005 (含) 以後版本選擇性地設定跨資料庫擁有權鏈結,請使用 sp_configure 針對伺服器關閉此功能。然後使用具有 SET DB_CHAINING ON 的 ALTER DATABASE 命令,僅針對需要此功能的資料庫設定跨資料庫擁有權鏈結。
動態 SQL
在執行動態建立之 SQL 陳述式的情況中,無法使用跨資料庫擁有權鏈結,除非兩個資料庫中存在相同的使用者。您可以在 SQL Server 2005 中建立存取其他資料庫資料的預存程序 (Stored Procedure),並使用存在於兩個資料庫中的憑證來簽署程序,藉此解決上述問題。如此可以讓使用者存取該程序所使用的資料庫資源,而不必為其授與資料庫存取權或權限。
外部資源
如需詳細資訊,請參閱下列資源。
資源 |
描述 |
---|---|
使用 EXECUTE AS 擴充資料庫模擬和 Cross DB Ownership Chaining 選項 (英文),《SQL Server 2008 線上叢書》 |
說明如何針對 Microsoft SQL Server 2008 的執行個體 (Instance) 設定跨資料庫擁有權鏈結的主題。 |
使用 EXECUTE AS 擴充資料庫模擬和 Cross DB Ownership Chaining 選項,《SQL Server 2005 線上叢書》 |
說明如何針對 Microsoft SQL Server 2005 的執行個體設定跨資料庫擁有權鏈結的主題。 |
跨 DB 擁有權鏈結,《SQL Server 2000 線上叢書》 |
說明如何使用 SQL Server 2000 SP3 中引進的選項設定跨資料庫擁有權鏈結。 |
請參閱
概念
在 SQL Server 中使用預存程序管理權限 (ADO.NET)
在 SQL Server 中撰寫安全的動態 SQL (ADO.NET)
在 SQL Server 中簽署預存程序 (ADO.NET)