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

CLR表值函数执行遇System.Security.SecurityException权限问题求助

CLR表值函数System.Security.SecurityException权限异常解决思路
  • 检查程序集权限级别
    SQL Server CLR程序集分三种权限:SAFE(默认,仅访问SQL内部资源)、EXTERNAL_ACCESS(可访问外部系统资源)、UNSAFE(最高权限)。若函数涉及外部资源访问,SAFE权限会触发异常。

    • 查看当前程序集权限:
      SELECT name, permission_set_desc FROM sys.assemblies WHERE name = '你的程序集名称';
      
    • 启用CLR并配置基础权限(SQL Server 2014):
      sp_configure 'show advanced options', 1; RECONFIGURE;
      sp_configure 'clr enabled', 1; RECONFIGURE;
      
    • 重新创建程序集时指定对应权限:
      CREATE ASSEMBLY [你的程序集名称] FROM 'D:\你的程序集路径\Assembly.dll' WITH PERMISSION_SET = EXTERNAL_ACCESS;
      
  • 确保程序集已强名称签名
    EXTERNAL_ACCESS或UNSAFE权限的程序集必须有强名称签名:

    • 在VS2017中,右键项目→属性→签名→勾选“为程序集签名”,选择或新建强名称密钥文件,重新编译。
    • 用工具验证签名:
      sn -v 你的程序集.dll
      
  • 排查代码中的权限敏感操作

    • 检查getNames函数是否包含访问外部资源的逻辑(如文件读取、网络请求、注册表访问等),这类操作需要对应权限。
    • 若访问Windows资源,需确保SQL Server服务账号(而非登录用户)拥有该资源的访问权限(比如给服务账号添加文件夹读取权限)。
  • 配置数据库信任设置(必要时)
    若程序集从本地文件加载,需开启数据库信任:

    ALTER DATABASE 你的数据库名称 SET TRUSTWORTHY ON;
    

    注意:开启TRUSTWORTHY会增加安全风险,优先考虑用证书/非对称密钥授权的方式替代。

  • 验证SQL Server服务账号权限
    打开服务管理器→找到SQL Server实例服务→右键属性→登录,确认运行账号,检查该账号对函数涉及的外部资源是否具备足够权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:55:18