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

MSSQL只读数据库加载CLR程序集遇权限问题求助

解决只读MSSQL数据库中.NET程序集加载失败的问题

临时快速方案:短暂切换读写模式开启TRUSTWORTHY

如果能协调出短暂的停机窗口,这是最快的解决路径:

  • 先将数据库切换为读写模式(会立即回滚未提交事务,需提前通知业务方):
    ALTER DATABASE [dbase] SET READ_WRITE WITH ROLLBACK IMMEDIATE;
    
  • 开启TRUSTWORTHY属性:
    ALTER DATABASE [dbase] SET TRUSTWORTHY ON;
    
  • 恢复只读模式:
    ALTER DATABASE [dbase] SET READ_ONLY WITH ROLLBACK IMMEDIATE;
    

推荐安全方案:用证书签名替代TRUSTWORTHY

微软官方不推荐依赖TRUSTWORTHY属性,建议通过证书签名程序集获取外部访问权限,步骤如下:

  1. 在master数据库创建签名证书:
    CREATE CERTIFICATE AssemblySigningCert 
    ENCRYPTION BY PASSWORD = 'YourStrongPassword123!' 
    WITH SUBJECT = 'Signing cert for external access assemblies';
    
  2. 导出证书到本地安全路径:
    BACKUP CERTIFICATE AssemblySigningCert 
    TO FILE = 'C:\SafeDir\AssemblySigningCert.cer';
    
  3. 临时切换目标数据库为读写模式,导入证书:
    ALTER DATABASE [dbase] SET READ_WRITE WITH ROLLBACK IMMEDIATE;
    CREATE CERTIFICATE AssemblySigningCert 
    FROM FILE = 'C:\SafeDir\AssemblySigningCert.cer';
    
  4. 用证书签名目标程序集:
    ADD SIGNATURE TO ASSEMBLY::[YourAssemblyName] 
    BY CERTIFICATE AssemblySigningCert 
    WITH PASSWORD = 'YourStrongPassword123!';
    
  5. 在master数据库创建对应登录名并授予权限:
    CREATE LOGIN AssemblySigningLogin 
    FROM CERTIFICATE AssemblySigningCert;
    GRANT EXTERNAL ACCESS ASSEMBLY TO AssemblySigningLogin;
    
  6. 恢复目标数据库为只读模式:
    ALTER DATABASE [dbase] SET READ_ONLY WITH ROLLBACK IMMEDIATE;
    

前置必查:确认程序集权限配置

先排查程序集本身的权限设置是否合规:

  • 执行查询查看当前权限:
    SELECT name, permission_set_desc 
    FROM sys.assemblies 
    WHERE assembly_id = 65547;
    
  • 如果权限不是EXTERNAL_ACCESS或UNSAFE,需临时切换数据库为读写模式后修改:
    ALTER ASSEMBLY [YourAssemblyName] WITH PERMISSION_SET = EXTERNAL_ACCESS;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 07:35:20