2017-04-11 212 views
1

使用VS2017,我創建了一個間接使用BouncyCastle.Crypto.dll的SQL CLR DLL(用於SQL Server 2014),但無法爲其編寫CREATE ASSEMBLY。它給出了一個警告,(我希望),但失敗並如何將帶有BouncyCastle.crypto.dll依賴項的程序集加載到SQL Server 2014中?

消息10332,級別16,狀態1,行85
大會 「BouncyCastle.Crypto」 是使用.NET Framework版本V1.1.4322建。 SQL Server當前使用版本v4.0.30319。

消息6218,級別16,狀態2,行90
CREATE組裝 'SqlClrBits' ASSEMBLY失敗,因爲程序集 'BouncyCastle.Crypto' 驗證失敗。檢查引用的程序集是否在數據庫中執行最新和可信(用於external_access或unsafe)。 CLR驗證器錯誤消息,如果有任何將遵循此消息
[:Org.BouncyCastle.OpenSsl.PemReader :: ReadObject] [mdToken = 0x6002e46] [偏移量0x00000024]調用的'this'參數必須是調用方法的'this'參數。
[:Org.BouncyCastle.OpenSsl.PemReader :: ReadObject] [mdToken = 0x6002e46] [offset 0x00000102]調用的'this'參數必須是調用方法的'this'參數。

我已成功加載它(預BouncyCastle的),這需要

CREATE ASYMMETRIC KEY MyKey ... FROM EXECUTABLE FILE ... 
CREATE LOGIN MyUser FROM ASYMMETRIC KEY MyKey 
GRANT EXTERNAL ACCESS ASSEMBLY TO MyUser 

之前我也勉強運行

ALTER DATABASE MyDb SET TRUSTWORTHY ON 

我甚至在自己的權利做CREATE ASSEMBLYBouncyCastle.Crypto 。 那麼..我如何將SQL CLR程序集加載到SQL Server中?

回答

1

當您遇到SQLCLR錯誤,提示「驗證失敗」時,您很可能需要將該組件標記爲UNSAFE。在這裏,您可能需要同時標記BouncyCastle.Crypto.dll以及將其引用爲UNSAFE的程序集。

此外,您需要測試多個會話在同一時間調用此代碼。目前還不清楚BouncyCastle在做什麼,它可能會做一些假設每個進程有更多分離的事情,而不是SQL Server的CLR主機,這是所有會話中共享的應用程序域。

相關問題