Sql server SQL Server 2017 Management Studio:创建程序集错误
我在C#中创建了用户定义的类型 当我运行此命令时:Sql server SQL Server 2017 Management Studio:创建程序集错误,sql-server,sqlclr,Sql Server,Sqlclr,我在C#中创建了用户定义的类型 当我运行此命令时: EXEC sp_configure 'clr enabled', 1; RECONFIGURE; GO EXEC sp_configure 'show advanced option', '1'; RECONFIGURE; GO USE NameOfDatabase CREATE ASSEMBLY Database1 FROM 'C:\Users\MyDoc\Desktop\Project\Database1\Dat
EXEC sp_configure 'clr enabled', 1;
RECONFIGURE;
GO
EXEC sp_configure 'show advanced option', '1';
RECONFIGURE;
GO
USE NameOfDatabase
CREATE ASSEMBLY Database1
FROM 'C:\Users\MyDoc\Desktop\Project\Database1\Database1\bin\Debug\Database1.dll'
WITH PERMISSION_SET = SAFE;
CREATE TYPE [dbo].[TypeName] EXTERNAL NAME [Database1].[NameInC#];
我得到一个错误:
味精10343,第14级,状态1,第10行使用安全或外部访问选项为程序集“Database1”创建或更改程序集失败,因为sp_configure的“clr strict security”选项设置为1。Microsoft建议您使用证书或非对称密钥对程序集进行签名,该证书或密钥具有具有不安全程序集权限的相应登录名。或者,您可以使用sp_add_trusted_assembly信任该程序集 如何解决这个问题
EXEC sp_configure'显示高级选项','1';
重新配置;
没有/没有理由执行此命令。这真的没什么害处,但也没用。这是一条更容易/更懒惰的路线,但当替代方案不难实施时,这是一个不需要打开的安全风险。有关值得信赖的问题的详细信息,请参阅:
[master]
数据库中创建相应的公钥(强名称密钥==创建非对称密钥…
;证书==创建证书…
)。现在,您可以从DLL文件中创建其中一个。如果此代码要进入生产环境,最好不要依赖DLL文件,因为这是对发布脚本的外部依赖。有两种方法可以完全自动化此过程,以下两篇文章介绍了这些选项:
不安全程序集
权限trustry
有关一般使用SQLCLR的更多信息,请访问:SQL Server 2017上存在相同问题。通过执行简单脚本解决了此问题:
EXEC sp_configure 'show advanced options', 1
RECONFIGURE;
EXEC sp_configure 'clr strict security', 0;
RECONFIGURE;
SQL Server 2017引入了一个名为“CLR strict security”的新服务器级配置选项,并在默认情况下启用该选项的原因
此选项要求使用证书或强名称密钥对所有程序集(即使是安全的程序集)进行签名。用于签名的证书(或非对称密钥)需要加载到[master]中,并从中创建登录名。此登录需要被授予不安全程序集权限
您还应确认有关XProtect版本支持的SQL版本的系统要求,因为这表明您正在不受支持/未经测试的配置上运行。错误消息中给出了两种解决方案。您尝试了哪一个?通过阅读它所说的内容并遵循给出的建议:
您使用证书或非对称密钥对程序集进行签名,该证书或密钥具有不安全的程序集权限的相应登录名。
或者,如果这不适合您,作为替代方案,您可以使用sp\u add\u trusted\u assembly信任程序集。
@AndrewMortonboth@TechGnome我试过了both@Lazar在问题中这样说是个好主意;)您尝试这些解决方案时是否有任何错误消息?