已加入sys.trusted_assemblies的SQLCLR程序发布提示不受信任如何解决
解决方案
发布报错修复
- 更新受信任程序集哈希
修改代码重新编译后,程序集的哈希值会发生变化,你之前添加的旧哈希已经失效。需要先重新计算新生成的CLR_UDF.dll的哈希值,删除sys.trusted_assemblies中的旧条目,重新执行sp_add_trusted_assembly添加新哈希后再发布。 - 调整发布逻辑
可以在VS2019的数据库项目发布配置中开启「增量更新程序集」选项,避免发布时删除重建程序集触发信任校验;也可以手动修改发布生成的SQL脚本,将CREATE ASSEMBLY语句替换为ALTER ASSEMBLY语句更新现有程序集。 - 改用签名信任方案
你已经使用SNK文件对程序集签名,更稳定的方案是走签名信任流程,不需要依赖受信任程序集列表:在master数据库中基于SNK文件创建非对称密钥,再基于该密钥创建对应登录账号,授予该账号UNSAFE ASSEMBLY权限,只要SNK签名不变,后续代码迭代都不会触发信任校验报错。
运行时报错修复
移除模拟代码后的报错是因为SQL Server服务的默认运行账号没有目标路径的访问权限:
- 访问本地路径时,给SQL Server服务运行账号授予对应目录的读取权限即可
- 访问远程服务器路径时,保留身份模拟逻辑,将代码中写死的用户名、密码、域参数替换为实际有目标路径访问权限的账号信息
- 补充身份回滚逻辑:当前代码模拟身份后没有调用
undoimpersonateUser()回滚,会导致后续请求身份异常,建议用using块包裹模拟逻辑,保证离开作用域时自动回滚身份。
内容的提问来源于stack exchange,提问作者Simple Simon
相关产品推荐
相关产品推荐

