如何将具有BouncyCastle.crypto.dll依赖性的程序集加载到SQL Server 2014中?

时间:2017-04-11 23:46:49

标签: .net sql-server sql-server-2014 bouncycastle sqlclr

使用VS2017,我创建了一个间接使用BouncyCastle.Crypto.dll的SQL CLR dll(适用于SQL Server 2014),但我无法CREATE ASSEMBLY。它给出了一个警告(我希望),但是失败了

  

Msg 10332,Level 16,State 1,Line 85
  程序集“BouncyCastle.Crypto”是使用.NET Framework的v1.1.4322版本构建的。 SQL Server当前使用的是v4.0.30319版。

     

Msg 6218,Level 16,State 2,Line 90
  程序集“SqlClrBits”的CREATE ASSEMBLY失败,因为程序集“BouncyCastle.Crypto”验证失败。检查引用的程序集是否是最新的并且在数据库中是否可信(对于external_access或unsafe)。 CLR Verifier错误消息(如果有)将遵循此消息
  [:Org.BouncyCastle.OpenSsl.PemReader :: ReadObject] [mdToken = 0x6002e46] [offset 0x00000024]调用的'this'参数必须是调用方法的'this'参数。
  [:Org.BouncyCastle.OpenSsl.PemReader :: ReadObject] [mdToken = 0x6002e46] [offset 0x00000102]调用的'this'参数必须是调用方法的'this'参数。

我已成功加载它(pre-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 ASSEMBLY做了BouncyCastle.Crypto。 那么..如何将我的SQL CLR程序集加载到SQL Server中?

1 个答案:

答案 0 :(得分:1)

当您收到SQLCLR错误说明,"验证失败"时,您很可能需要将该程序集标记为UNSAFE。在这里,您可能需要标记 BouncyCastle.Crypto.dll 以及将其引用为UNSAFE的程序集。

此外,您需要在同一时间调用此代码的多个会话中对此进行测试。目前还不清楚BouncyCastle正在做什么,并且它可能会做一些事情,假设每个进程有更多的分离,而不是SQL Server的CLR主机,它是在所有会话中共享的App Domain。