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

SQL Server编译含链接服务器查询的存储过程时遇客户端加密不支持错误

解决编译含OPENQUERY的存储过程时的“Encryption not supported on the client”错误

这种情况我碰到过好几次——单独跑OPENQUERY没问题,一放进存储过程编译就炸,而且之前还好好的,确实挺闹心的。结合你用的SQL Server 2014,给你几个实用的排查和解决方向:

  • 检查链接服务器的加密选项
    存储过程编译时对链接服务器的配置校验会比单独执行查询更严格。你右键目标链接服务器打开属性,切到「服务器选项」标签页,找到Encrypt这一项:

    • 如果它设为True,但你的SQL Server 2014客户端不支持目标服务器用的加密协议(比如TLS 1.2+,2014默认没开这个支持),就会触发错误。可以先改成False试试能不能编译,之后再考虑补补丁升级加密支持。
  • 给存储过程指定明确的执行上下文
    单独执行OPENQUERY时用的是你当前会话的上下文,但存储过程编译时可能用的是默认的安全上下文,权限或加密配置不匹配。你可以在存储过程里显式指定登录:

    CREATE PROCEDURE YourProcName
    AS
    BEGIN
        -- 切换到链接服务器的登录账号
        EXECUTE AS LOGIN = 'LinkedServerLogin';
        SELECT * FROM OPENQUERY(YourLinkedServer, 'SELECT * FROM TargetDB.dbo.TargetTable');
        -- 切回原上下文
        REVERT;
    END
    

    确保这个登录有访问链接服务器的权限,而且它的加密设置和目标服务器兼容。

  • 给SQL Server 2014补补丁
    SQL Server 2014早期版本对TLS 1.2及以上协议的支持是缺失的,如果目标服务器现在强制用了高版本TLS,你的客户端没打补丁就会报加密不支持。赶紧装个最新的累积更新(CU),比如CU6及以后的版本,就能补上TLS 1.2的支持。

  • 调整本地客户端的加密配置
    打开SQL Server配置管理器,找到「SQL Server Native Client 11.0配置」→「客户端协议」,右键「TCP/IP」看属性:

    • 如果「加密」设为「强制」,但链接服务器那边的加密配置不匹配,也会出问题。改成「可选」再试试编译存储过程。
  • 重建链接服务器
    有时候链接服务器的元数据会莫名其妙出问题,看起来连接正常,但编译时就报错。先删了重建试试:

    -- 删除链接服务器及关联登录
    EXEC sp_dropserver 'YourLinkedServer', 'droplogins';
    -- 重新创建链接服务器
    EXEC sp_addlinkedserver 
        @server = 'YourLinkedServer',
        @srvproduct = '',
        @provider = 'SQLNCLI11',
        @datasrc = 'TargetServerIP\InstanceName';
    -- 添加登录映射
    EXEC sp_addlinkedsrvlogin 
        @rmtsrvname = 'YourLinkedServer',
        @useself = 'False',
        @locallogin = NULL,
        @rmtuser = 'TargetLogin',
        @rmtpassword = 'TargetPassword';
    

先从这几个方向入手,应该能解决问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:05:03