一、使用vs2017生成sqlserver 2017项目时由于添加的程序集(CLR集成,可以参考后面给出的链接进行理解)

,由于安全权限的配置不正确引发以下的问题:

SQL72014: .Net SqlClient Data Provider: Msg 10343, Level 14, State 1, Line 1

针对带有 SAFE 或 EXTERNAL_ACCESS 选项的程序集“XXX”的 CREATE 或 ALTER ASSEMBLY 失败,

因为 sp_configure 的“clr 严密安全性”选项设置为 1。Microsoft 建议使用其相应登录名具有 UNSAFE ASSEMBLY

权限的证书或非对称密钥为该程序集签名。或者,也可以使用 sp_add_trusted_assembly 信任程序集。

起因—摘抄自MSDN: https://docs.microsoft.com/zh-cn/sql/database-engine/whats-new-in-sql-server-2017?view=sql-server-2017

Sqlserver2017中,CLR 在 .NET Framework 中使用代码访问安全性 (CAS)(不可再作为安全边界)。

使用 PERMISSION_SET = SAFE 创建的 CLR 程序集可以访问外部系统资源、调用非托管代码以及获取 sysadmin 特权。

从 SQL Server 2017 (14.x) 开始,引入了名为 clr strict security 的 sp_configure 选项,以增强 CLR 程序集的安全性。

默认启用 clr strict security,并将 SAFE 和 EXTERNAL_ACCESS 程序集与标记为 UNSAFE 的程序集同等对待。

可禁用 clr strict security 选项以实现后向兼容性,但不建议这样做。 Microsoft 建议所有程序集都通过证书或非对称密钥进行签名,

且该证书或非对称密钥具有已在主数据库中获得 UNSAFE ASSEMBLY 权限的相应登录名。 现在可以将 CLR 程序集添加到白名单,

作为 clr strict security 功能的变通方法。 添加 sp_add_trusted_assembly、sp_drop_trusted_assembly 和 sys.trusted_asssemblies

以支持受信任的程序集白名单。 有关详细信息,请参阅 CLR 严格安全性。

二、解决方式:http://usingprogramming.com/category/Blog

采用 sp_add_trusted_assembly的方式添加信任到数据库里去.

DECLARE @hash AS BINARY(64) = (SELECT HASHBYTES('SHA2_512', (SELECT * FROM OPENROWSET (BULK 'XXX.dll', SINGLE_BLOB) AS [Data])))

EXEC sp_add_trusted_assembly @hash

然后可以通过:

select * from sys.trusted_asssemblies 视图查看已经添加的信任的程序集

至此就解决了. 希望有所帮助.