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

適用於:SQL Server

控制 SQL Server 中 SAFEEXTERNAL_ACCESSUNSAFE 權限的解譯。 如需這些權限的詳細資訊,請參閱 設計元件

說明
0 已停用 為了回溯相容而提供。 不建議將此值設為 , 0 因為可能會造成安全漏洞。
1 已啟用。 讓資料庫引擎忽略組件的 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

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

備註

啟用時,會在執行階段忽略 PERMISSION_SETCREATE ASSEMBLY 陳述式中的 ALTER ASSEMBLY 選項,但在中繼資料中會保留 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 來啟用選項。

EXECUTE sp_configure 'clr strict security';
GO

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