共用方式為


CLR 整合安全性中的連結

本節說明如何在 SQL Server 中,以 Transact-SQL 或其中一種 Managed 語言呼叫使用者程序代碼。 對象之間的這些關聯性稱為連結。

調用鏈接會對應至程式代碼調用,無論是從呼叫對象的使用者(例如呼叫預存程式的 Transact-SQL 批次),還是 Common Language Runtime (CLR) 預存程式或函式。 叫用連結會導致 EXECUTE 檢查被呼叫者的許可權。

數據表存取連結會對應至擷取或修改數據表、檢視或數據表值函式中的值。 它們類似於調用連結,不同之處在於它們具有 SELECT、INSERT、UPDATE 和 DELETE 許可權的更精細存取控制。

閘道連結表示在執行期間,在建立對象關聯性之後,不會檢查許可權。 當兩個對象之間有閘道連結時(例如,object x 和 object y),物件 y 和其他從物件 y 存取的物件許可權只會在物件 x 的建立時間進行檢查。 在物件 x 的建立時間,REFERENCEx 的擁有者檢查 y 的許可權。 在運行時間(例如,當有人呼叫物件 x 時),沒有任何許可權會針對它靜態參考 的 y 或其他對象進行檢查。 在運行時間,系統會針對物件 x 本身檢查適當的許可權。

閘道連結一律會與兩個對象之間的元數據相依性搭配使用。 此元數據相依性是在 SQL Server 目錄中建立的關聯性,只要另一個物件相依於該物件,就防止卸除物件。

當閘道連結不適合或可管理時,將許可權授與許多相依物件時,會很有用。 對象之間引進了閘道連結,這些物件定義 CLR 元件的進入點 Transact-SQL(例如 CLR 程式、觸發程式、函式、類型和匯總),以及定義它們的元件。 針對這些對象的閘道安全性表示,為了叫用 CLR 元件中定義的 Transact-SQL 進入點,呼叫端只需要該 Transact-SQL 進入點的適當許可權。 呼叫端不需要擁有該元件的許可權,或它靜態參考的任何其他元件。 在建立 Transact-SQL 進入點時,會檢查元件的許可權。

SQL Server Authorization-Based 安全性

以下是 SQL Server 安全性檢查背後的基本規則,用於叫用 CLR 資料庫物件之間的 和 ;前三個規則會定義要檢查哪些許可權,以及針對哪一個物件;第四個規則會定義要檢查許可權的執行內容。

  1. 除非叫用發生在相同物件內,否則所有調用都需要 EXECUTE 許可權;這表示相同元件內的呼叫不需要任何許可權檢查。 在運行時間檢查許可權。

  2. 建立呼叫物件時,閘道連結需要 REFERENCE 對被呼叫者的許可權。 建立物件時,會檢查呼叫對象的擁有者的許可權。

  3. 數據表存取連結需要針對要存取之數據表或檢視的對應 SELECTINSERTUPDATEDELETE 許可權。

  4. 許可權會根據目前的執行內容進行檢查。 程式與函式可以使用與呼叫端不同的執行內容來建立。 元件一律會使用針對它定義的程式、函式或觸發程式執行內容來建立。

另請參閱

CLR 整合安全性