You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何无需开启TRUSTWORTHY ON注册SQLCLR引用程序集?

当然有办法!完全不用开启TRUSTWORTHY ON就能搞定未签名的Newtonsoft.dll注册,核心是利用SQL CLR的依赖信任机制——让已经通过非对称密钥获得信任的Something.dll来“背书”它的引用集。我给你分两种场景详细说明:

场景1:Newtonsoft.dll仅需SAFE权限(绝大多数情况)

Newtonsoft.Json的核心序列化/反序列化功能完全在SAFE权限集下就能正常运行,这也是最推荐的方式,因为SAFE权限的程序集不需要签名,也不需要额外的信任配置。

步骤如下:

  1. 先注册Newtonsoft.dll为SAFE权限:
CREATE ASSEMBLY [Newtonsoft.Json]
FROM 'C:\YourAssemblyPath\Newtonsoft.dll'
WITH PERMISSION_SET = SAFE;
  1. 再注册你的Something.dll(已经签名并关联非对称密钥):
CREATE ASSEMBLY [Something]
FROM 'C:\YourAssemblyPath\Something.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS,
    ASYMMETRIC KEY [YourAsymmetricKeyName];

SQL Server会自动识别两者的依赖关系,因为SAFE权限低于EXTERNAL_ACCESS,且主程序集已经通过非对称密钥获得信任,所以不会报错。

场景2:Newtonsoft.dll确实需要EXTERNAL_ACCESS/UNSAFE权限

如果你的业务逻辑用到了Newtonsoft.Json的特殊功能(比如涉及文件IO、反射等需要更高权限的操作),可以通过主程序集的信任链间接授权:

  1. 确保你的非对称密钥对应的登录账号拥有EXTERNAL ACCESS ASSEMBLY权限(这一步你应该已经完成,但还是确认下):
GRANT EXTERNAL ACCESS ASSEMBLY TO [LoginCreatedFromYourAsymmetricKey];
  1. 直接注册Newtonsoft.dll并指定所需的权限集:
CREATE ASSEMBLY [Newtonsoft.Json]
FROM 'C:\YourAssemblyPath\Newtonsoft.dll'
WITH PERMISSION_SET = EXTERNAL_ACCESS; -- 或 UNSAFE,如果确实需要

因为你的Something.dll已经通过非对称密钥被SQL Server信任,作为它的依赖程序集,Newtonsoft.dll会自动继承这条信任链,无需开启TRUSTWORTHY。

额外注意事项
  • 确保SQL Server的CLR功能已经开启(默认可能关闭),开启命令:
sp_configure 'show advanced options', 1;
RECONFIGURE;
sp_configure 'clr enabled', 1;
RECONFIGURE;
  • 尽量避免给程序集赋予超过实际需求的权限,SAFE能满足的就不要用EXTERNAL_ACCESS,更不要随便用UNSAFE,减少安全风险。
  • 确保Newtonsoft.dll的版本和你编译Something.dll时引用的版本完全一致,否则可能出现版本不兼容的错误。

内容的提问来源于stack exchange,提问作者OZ1903

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:55:37