首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL Server 2005 SQLCLR 程式碼安全權限集解析

     編輯:關於SqlServer

SQLCLR 三大權限集層級

當使用 CREATE ASSEMBLY 將組件載入資料庫時,SQL Server 2005 提供三種權限集:

  • SAFE(預設)
  • EXTERNAL_ACCESS
  • UNSAFE

這些權限集對應不同的 AppDomain 原則層級,決定程式碼能存取的資源範圍。

權限集授予範例

CREATE ASSEMBLY FileAccess
FROM 'E:\FileLoader.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS;
GO

各權限集詳細權限

1. SAFE

最嚴格的層級,僅允許:

  • 執行純運算邏輯。
  • 透過內容連接字串 (context connection=true) 存取裝載 SQL Server 執行個體內的資料與物件。
  • 禁止存取外部資源:檔案系統、登錄、其他 SQL Server 執行個體、網路等。
  • 程式碼必須通過類型安全驗證,防止緩衝區溢位等攻擊。

授予的 CAS 權限僅包含 SecurityPermission (Execution) 與受限的 SqlClientPermission (僅允許內容連接、不可空密碼)。

2. EXTERNAL_ACCESS

允許存取外部資源,如:

  • 讀寫本機檔案系統。
  • 存取網路資源 (需模擬呼叫者的安全性內容)。
  • 使用 ADO.NET 連接外部資料來源。

部署時需資料庫擁有者 (DBO) 擁有 EXTERNAL ACCESS ASSEMBLY 權限,且資料庫設定 TRUSTWORTHY ON 或組件以強式名稱/憑證簽署並建立對應登入授權。

3. UNSAFE

最高權限,允許呼叫非受控程式碼、操作執行緒、存取記憶體指標等高風險操作。僅限 sysadmin 固定伺服器角色成員部署,極度謹慎使用。

最佳實務建議

  • 優先使用 SAFE,滿足大多數資料邏輯封裝需求。
  • 確需外部存取時,採用 EXTERNAL_ACCESS 搭配憑證/非對稱金鑰簽署,避免開啟 TRUSTWORTHY。
  • 嚴格限制 UNSAFE 組件部署,定期稽核已註冊組件權限集。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved