一、使用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 严格安全性。
采用 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 视图查看已经添加的信任的程序集
至此就解决了. 希望有所帮助.
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。