【问题标题】:Trusted Assemblies feature broken after upgrade to SQL Server 2017 from 2014从 2014 年升级到 SQL Server 2017 后受信任的程序集功能中断
【发布时间】:2021-06-13 23:05:12
【问题描述】:

在 2014 年到 2017 年的就地升级过程中,我们遇到了几个问题,即受信任的程序集 CLR 功能在当时干扰了 SSIS 的成功安装。我已经安装并运行了 SSIS,但该功能仍然被破坏。

我当时收到的错误,当我直接查询系统表时仍然收到:“内部表访问错误:无法访问受信任的程序集内部表”。系统视图似乎在“表”TRUSTED_ASSEMBLIES 上运行 OPENROWSET。我在互联网上没有看到很多人在讨论这个问题。

我不打算使用该功能,但我担心它可能会在将来与更新或外部供应商之间造成问题。另一个症状是,为了解决 SSIS 包执行的一些问题,我必须手动将执行权限分配给通常为您完成的低级过程(幸运的是,文档指出哪些内置组可以访问过程)。

如果有人对此问题有任何见解,将不胜感激;猜测可能需要拆除和完全重建。

【问题讨论】:

  • 您好。如果可能的话,您能否使用 exact and complete 错误消息更新问题,包括“Msg”、“Level”和“State”值,或“HRESULT”(如果已提供)?这将有助于缩小范围。谢谢!

标签: sql-server ssis sqlclr


【解决方案1】:

您是否为 SQL Server 2017 应用了 CU(累积更新)?如果没有,您可能应该这样做。

是的,“CLR 严格安全”/“受信任的程序集”“功能”是垃圾箱之火。请参阅我对以下问题的回答(也在 SO 上)关于解决新的(自 SQL Server 2017 起)限制的正确方法(该答案的最后一段涉及您的情况:预先存在的、未签名的程序集):

CLR Strict Security on SQL Server 2017

使用模块签名,您应该能够在不直接分配任何权限的情况下让一切正常工作。

至于那个特定的“内部表访问错误”错误,这对我来说是新的。我假设您正在以sa 的身份执行SELECT * FROM sys.trusted_assemblies' 或作为sysadmin 固定服务器角色成员的其他登录名?如果不是,您将收到权限错误说明:

消息 300,第 14 级,状态 1,第 XXXXX 行
对象“服务器”、数据库“主服务器”的查看服务器状态权限被拒绝。
消息 297,第 16 级,状态 1,第 XXXXX 行
用户无权执行此操作。

由于您没有收到权限错误,可能某些组件没有正确/完全升级(因此请确保您已安装最新的 CU可能检查/修复)。

【讨论】:

  • 是的,很遗憾,我们已更新到最新版本,但这并没有解决问题。幸运的是,这似乎是唯一剩下的问题,虽然我不打算使用受信任的程序集,但它确实阻止了我轻松创建新的 SSISDB 目录,并希望我们能够解决这个问题以避免将来出现问题。这个错误对我来说是新的,当我用谷歌搜索它时,我得到的只是该错误是在 2017 年添加的文档。如果我找到解决方案,显然我将不得不为后代记录。
  • @drexasaurus 好吧,至少我们知道什么是行不通的,对吧 ;-)。是的,关于这个错误的内容不多。我在 Google 中看到了一个看起来完全相同的错误(即对于受信任的程序集)的引用,但该页面不再有效。我在 social.msdn 上发现了另一个关于相同错误消息的问题(即读取内部表时出错),但它是针对其他问题的,我相信建议是应用最新的 CU,但我不记得有任何结果确认。我检查了compatibility_level = 120containment = partial(以防万一),都没有导致错误。
  • @drexasaurus 我什至只是尝试了EXEC sp_configure N'clr enabled', 0; RECONFIGURE;,然后:EXEC sp_configure N'lightweight pooling', 1; RECONFIGURE;(然后重新启动实例),仍然没有错误。我尝试这样做是因为“轻量级池”禁用了所有与 CLR 相关的东西,甚至是内部功能(例如FORMAT()COMPRESS()AT TIMEZONE 等)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-01
  • 2019-07-12
  • 2014-09-10
  • 1970-01-01
  • 2016-11-18
  • 1970-01-01
相关资源
最近更新 更多