分享方式:


伺服器組態:CLR 嚴格安全性

適用於:SQL Server

控制 SQL Server 中 SAFEEXTERNAL_ACCESSUNSAFE 權限的解譯。 如需有關組件權限集合的詳細資訊,請參閱設計組件

Description
0 Disabled。 提供這個項目的目的,是為了與舊版相容。 不建議將 0 設定為一個小的值。
1 Enabled。 讓資料庫引擎忽略組件的 PERMISSION_SET 資訊,而且一律解譯為 UNSAFE。 在 SQL Server 2017 (14.x) 和更新版本中,1 是預設值。

不再支援程式碼存取安全性

CLR 使用 .NET Framework 中的程式碼存取安全性 (CAS),而這不再作為安全性界限受支援。 使用 PERMISSION_SET = SAFE 所建立的 CLR 組件可以存取外部系統資源、呼叫非受控程式碼,以及取得系統管理員權限。 在 SQL Server 2017 (14.x) 和更新版本中, clr strict security 會將 SAFEEXTERNAL_ACCESS 元件視為標記為 UNSAFE

我們建議透過具有已獲授與資料庫中 UNSAFE ASSEMBLY權限master 之對應登入的憑證或非對稱金鑰簽署所有組件。 SQL Server 系統管理員也可以將組件新增至資料庫引擎應該信任的組件清單。 如需詳細資訊,請參閱 sys.sp_add_trusted_assembly

備註

啟用時,會在執行階段忽略 CREATE ASSEMBLYALTER ASSEMBLY 陳述式中的 PERMISSION_SET 選項,但在中繼資料中會保留 PERMISSION_SET 選項。 忽略此選項可將中斷現有程式碼陳述式最小化。

CLR strict securityadvanced option

啟用嚴格安全性之後,將無法載入任何未簽署的組件。 您必須改變或置放並重新建立每個組件,以使用憑證或非對稱金鑰進行簽署,該金鑰有具有伺服器 UNSAFE ASSEMBLY 權限的對應登入。

權限

變更此選項

需要 CONTROL SERVER 權限或系統管理員 sysadmin 固定伺服器角色中的成員資格。

建立 CLR 組件

啟用 CLR strict security 時,需要有下列權限才能建立 CLR 組件:

  • 使用者必須具有 CREATE ASSEMBLY 權限

  • 下列其中一個條件也必須成立:

    • 組件是使用憑證或非對稱金鑰進行簽署,該金鑰有具有伺服器 UNSAFE ASSEMBLY 權限的對應登入。 建議簽署組件。

    • 資料庫的 TRUSTWORTHY 屬性設定為 ON,而且具有伺服器之 UNSAFE ASSEMBLY 權限的登入擁有資料庫。 不建議使用此選項。

範例

下列範例會先顯示 clr strict security 選項的目前設定,然後將選項值設定為 1 來啟用選項。

EXEC sp_configure 'clr strict security';
GO
EXEC sp_configure 'clr strict security' , '1';
RECONFIGURE;
GO