簡體   English   中英

一個 SQL CLR Assembly 設置為 UNSAFE with a key 不再工作

[英]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)

幾個花絮/問題:

  • 上周發生了一些事情,它剛剛開始出現上面的這些錯誤
  • 該程序集是不安全的,因為 JSON.Net 是幾年前添加到其中的
  • 據我所知,通過 IT 談話,可信賴是開啟的(我知道安全性,但這只是內部的)
  • .pfx密鑰會過期嗎?
  • 我可以運行任何查詢來檢查所有權限以查看是否正確嗎? (我自己可能沒有完全訪問權限,但有人可以檢查它們)
  • 我不相信它使用證書,但過去我們使用.pfx和特定的登錄名來訪問程序集。
  • 我相信這是在 SQL Server 2012 中創建的,但現在在 SQL Server 2016 上運行

任何幫助將不勝感激。

模塊簽名會忽略證書過期日期,尤其是對於驗證(這是在此上下文中使用證書的目的,而不是簽名)。 但是,如果您沒有使用該證書(通過將其加載到[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>;

第一個查詢將:

  1. 確認是否啟用了TRUSTWORTHY
  2. 給你數據庫所有者的 SID(在第二個查詢中使用)
  3. 指示服務器級別和數據庫級別之間的所有者 SID 值是否不匹配

第二個查詢應至少返回以下行:

UNSAFE ASSEMBLY GRANT

根據結果:

  1. 如果TRUSTWORTHY實際上設置為OFF ,您可以將其設置為ON
  2. 如果兩個 SID 值不相同,則通過ALTER AUTHORIZATION修復其中一個
  3. 如果登錄名沒有UNSAFE ASSEMBLY權限,則授予它

所以發生了什么事? 有人要么:

  1. TRUSTWORTHY設置為OFF
  2. 將數據庫所有者更改為沒有UNSAFE ASSEMBLY權限的所有者
  3. 從登錄中撤銷了UNSAFE ASSEMBLY權限

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM