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

Linux环境下MSSQL Server SPN Kerberos认证连接失败求助

Kerberos认证连接SQL Server失败排查思路

问题背景

AD管理员通过setspn工具为新服务器rel配置了与已正常工作的dev服务器相同的SQL Server SPN,但Linux服务器使用MS SQL Server ODBC Driver 18连接rel时,持续出现错误:

Error: ('HY000', '[HY000] [Microsoft][ODBC Driver 18 for SQL Server]SSPI Provider: Server not found in Kerberos database (851968) (SQLDriverConnect)')

dev服务器最初也无法连接,数月后自动恢复正常,而rel配置已2周仍无法使用Kerberos认证连接。

排查步骤

1. 验证SPN的全域控制器同步状态

  • 要求AD管理员在所有7个域控制器上执行以下命令,确认SPN在每个DC上都存在:
    setspn -Q MSSQLSvc/rel:rel_port
    
    多DC环境下SPN复制可能存在延迟,dev的延迟恢复大概率是SPN最终同步到所有DC导致的,需确认rel的SPN已完成全域同步。
  • 核对SPN格式:确保SPN为MSSQLSvc/rel:rel_port(正斜杠),绑定的服务账号是rel实例对应的domain\rel_service_user,与dev的配置逻辑完全一致。

2. 检查Kerberos票据的获取与匹配

  • 执行kinit user@DOMAIN.ORG获取票据后,用klist查看缓存,确认是否存在MSSQLSvc/rel:rel_port@DOMAIN.ORG的服务票据。若不存在,说明Kerberos无法定位该SPN对应的服务主体。
  • 尝试手动指定SPN获取票据后再测试连接:
    kinit -S MSSQLSvc/rel:rel_port user@DOMAIN.ORG
    
    成功获取后再执行Python连接代码,验证是否能绕过自动协商的问题,定位是SPN本身还是自动协商逻辑的故障。

3. 优化krb5.conf配置

  • 补充票据缓存路径配置,避免权限或路径问题导致票据无法读取:
    [libdefaults]
    default_realm = DOMAIN.ORG
    dns_lookup_realm = true
    dns_lookup_kdc = true
    default_ccache_name = FILE:/tmp/krb5cc_%{uid}
    
  • 手动指定域控制器列表到[realms]段,避免DNS解析到未同步SPN的DC:
    [realms]
    DOMAIN.ORG = {
        kdc = dc1.domain.org
        kdc = dc2.domain.org
        admin_server = dc1.domain.org
    }
    

4. 验证主机名解析与映射

  • 在Linux服务器上执行nslookup rel和nslookup rel.domain.org,确认返回的IP是rel服务器的正确地址,且SQL Server实例绑定的IP与该地址一致(多IP场景下可能导致SPN匹配失败)。
  • 检查/etc/hosts文件,若存在rel的条目,确保其IP与DNS解析结果一致,避免本地映射干扰Kerberos的SPN匹配逻辑。

5. 核对SQL Server服务账号配置

  • 确认rel的SQL Server服务运行账号为AD管理员配置SPN时指定的domain\rel_service_user,且该账号未被锁定、权限未变更。
  • 在SQL Server上执行以下查询,确认服务账号已正确注册为登录名并具备连接权限:
    SELECT name, principal_id, type_desc 
    FROM sys.server_principals 
    WHERE name = 'domain\rel_service_user'
    

6. 排查ODBC驱动的协商逻辑

  • 修改连接字符串,使用服务器完整域名(FQDN)而非短名:
    cnxn_str = ("Driver={ODBC Driver 18 for SQL Server};Server=rel.domain.org;Trusted_Connection=yes;Encrypt=No;TrustServerCertificate=yes")
    
    Kerberos有时需要FQDN才能精准匹配SPN。
  • 升级ODBC Driver 18到最新版本,旧版本可能存在Kerberos协商的已知bug,导致无法正确查找SPN。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 09:20:41