【发布时间】:2016-03-15 17:40:08
【问题描述】:
我正在 Visual Studio 中开发一个 SQL Server 数据库项目,它实际上是一个用户定义的函数。在这个项目中,我包含了 Json.NET 作为参考(使用 NuGet)。
我通过首先打开数据库TRUSTWORTHY ON(因为我的项目是不安全的)然后运行以下命令,成功地将我的程序集和 UDF 发布(并使工作)到我的 SQL Server 实例:
CREATE ASSEMBLY [System.Runtime.Serialization]
FROM 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.Serialization.dll'
WITH PERMISSION_SET = UNSAFE;
原来是 Json.NET 依赖的一个程序集(如果我不这样做,就会出错)
同时I read about how bad turning TRUSTWORTHY ON can be 和我尝试以go the asymmetric key 的方式避免开启它。
在签署我自己的程序集之前,我知道我必须为 System.Runtime.Serialization 创建一个密钥,因为我的项目依赖于 Json.Net,而 Json.Net 又依赖于它,但是当我运行它时,我得到了这个:
USE [master];
GO
CREATE ASYMMETRIC KEY [SystemRuntimeSerializationKey]
AUTHORIZATION [dbo]
FROM EXECUTABLE FILE = 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\System.Runtime.Serialization.dll';
GO
Msg 15468, Level 16, State 5, Line 3
An error occurred during the generation of the asymmetric key.
这对我没有多大帮助。
那么是否可以为 .NET 框架程序集生成这样的密钥,或者它是否存在打开 TRUSTWORTHY ON 以外的解决方法?
【问题讨论】:
-
顺便说一句——SQL Server 2016 还没有完全推出,但它会支持原生 JSON,这可能意味着整个问题都会为你解决——取决于你在做什么当然是 JSON。
标签: .net sql-server .net-assembly sqlclr database-project