【发布时间】:2018-05-25 21:07:27
【问题描述】:
尝试从我构建的 DLL 创建一个存储过程,以使用 CLR 集成与 SQL 一起使用。我想我需要一个签名版本的 System.Net.Http 并在下面解释原因。任何建议或提示将不胜感激。
如果我使用命令,解决方案 100% 有效
ALTER DATABASE test2 SET TRUSTWORTHY ON
然后我使用以下命令创建程序集
CREATE ASSEMBLY [System.Net.Http]
AUTHORIZATION dbo
FROM 'C:\Windows\Microsoft.NET\assembly\GAC_MSIL\System.Net.Http\v4.0_4.0.0.0__b03f5f7f11d50a3a\System.Net.Http.dll'
WITH PERMISSION_SET = UNSAFE;
GO
CREATE ASSEMBLY [CLRTest01]
AUTHORIZATION dbo
FROM 'C:\Windows\CLRTest01.dll'
WITH PERMISSION_SET = UNSAFE;
GO
由于我选择信任默认设置,因此我希望能够在不使用权限级别“不安全”的情况下执行此操作,而是使用“安全”。但是,当我尝试为依赖于 System.Net.Http 的 CLRTest01 执行此操作时,我遇到了 System.Net.Http 未签名或格式错误的问题。
CREATE ASSEMBLY [System.Net.Http]
AUTHORIZATION dbo
FROM 'C:\Windows\System.Net.Http.dll'
WITH PERMISSION_SET = SAFE;
GO
使用 v4.0_2.0.0.0__b03f5f7f11d50a3a 时出错 - 无法安装程序集“System.Net.Http”,因为现有策略会阻止它被使用。
使用 v4.0_4.0.0.0__b03f5f7f11d50a3a 时出错 - CREATE ASSEMBLY 失败,因为安全程序集“System.Net.Http”中的类型“System.Net.Http.HttpContent”有一个静态字段“EncodingsWithBom”。安全程序集中静态字段的属性必须在 Visual C# 中标记为只读,在 Visual Basic 中标记为只读,在 Visual C++ 和中间语言中标记为 initonly。
这让我相信我需要一个签名版本的 System.Net.Http。
【问题讨论】:
-
您使用的是什么版本的 SQL Server?是否可以改用
HttpWebRequest?这至少已经是 SQL Server 的 CLR 主机的一部分。此外,您可能应该从原始位置添加程序集,而不是直接从 GAC 中添加。
标签: c# .net sql-server security sqlclr