[英]Can I store information in a Static Variable in a SQL Server CLR Assembly without using UNSAFE?
[英]A SQL CLR Assembly set to UNSAFE with a key is no longer working
我有一個 UNSAFE 程序集在僅內部數據庫和 web 應用程序上運行,但 IT 部門。 可能已經改變了一些東西,因為我們注意到它剛剛停止工作並試圖找出原因。
錯誤:
Msg 10314, Level 16, State 11, Line 12
嘗試加載程序集 ID xxxxx 時,Microsoft .NET 框架發生錯誤。 服務器可能資源不足,或者程序集可能不受信任 PERMISSION_SET = EXTERNAL_ACCESS 或 UNSAFE。 再次運行查詢,或查看文檔以了解如何解決程序集信任問題。 有關此錯誤的更多信息:System.IO.FileLoadException:無法加載文件或程序集“mytestassembly,Version=0.0.0.0,Culture=neutral,PublicKeyToken=xXXXXXXXXXXXXx”或其依賴項之一。 發生與安全相關的錯誤。 (HRESULT 異常:0xXXXXXXXA)
系統.IO.FileLoadException:
在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean for Introspection, 881161348 suppress34768Checks)
幾個花絮/問題:
.pfx
密鑰會過期嗎?.pfx
和特定的登錄名來訪問程序集。任何幫助將不勝感激。
模塊簽名會忽略證書過期日期,尤其是對於驗證(這是在此上下文中使用證書的目的,而不是簽名)。 但是,如果您沒有使用該證書(通過將其加載到[master]
數據庫並從該證書創建一個登錄名,然后授予UNSAFE ASSEMBLY
權限),那么這部分無論如何都是無關緊要的。
以下是開始調查的兩個查詢:
USE [db_name_containing_the_assembly];
SELECT db.name, db.is_trustworthy_on, db.owner_sid, USER_SID(1) AS [OwnerSID-DbLevel]
FROM sys.databases db
WHERE db.database_id = DB_ID();
SELECT perm.[permission_name], perm.[state_desc]
FROM sys.server_permissions perm
WHERE perm.grantee_principal_id = <db.owner_sid from first query>;
第一個查詢將:
TRUSTWORTHY
第二個查詢應至少返回以下行:
UNSAFE ASSEMBLY GRANT
根據結果:
TRUSTWORTHY
實際上設置為OFF
,您可以將其設置為ON
ALTER AUTHORIZATION
修復其中一個UNSAFE ASSEMBLY
權限,則授予它所以發生了什么事? 有人要么:
TRUSTWORTHY
設置為OFF
UNSAFE ASSEMBLY
權限的所有者UNSAFE ASSEMBLY
權限
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.