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

无法使用Kerberos缓存连接SQL Server的故障排查求助

问题:Debian通过ODBC Driver 18连接SQL Server集成认证失败

我有一台安装了ODBC Driver 18的Debian实例,尝试连接Windows环境下的SQL Server实例。已通过credentials-fetcher获取凭证缓存,klist显示缓存存在:

Ticket cache: FILE:/var/credentials-fetcher/krbdir/{uid}/gmsa-test/krb5cc
Default principal: go_test_credfetcher@CONTOSO.COM
Valid starting     Expires            Service principal
10/02/23 11:00:00  10/02/23 21:00:00  krbtgt/CONTOSO.COM@CONTOSO.COM

使用gMSA账户gmsa-test,且Debian机器名(未加入域)同样为gmsa-test。已配置odbc.ini文件:

[MyDB]
Driver = ODBC Driver 18 for SQL Server
Server = tcp:intdb.contoso.com
Port = 1433
Trusted_Connection = Yes

尝试用集成身份认证访问数据库时,出现连接超时错误:

sqlcmd -E -S MyDB
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : Login timeout expired.
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : TCP Provider: Error code 0x2AFA.
Sqlcmd: Error: Microsoft ODBC Driver 18 for SQL Server : A network-related or instance-specific error has occured while establishing a connection to MyDB. Server is not found or not accessible. Check if instance name is correct and if SQL server is configured to allow remote connections.

服务器intdb.contoso.com可正常ping通,telnet 1433端口也能连通,请问可能是什么原因?


可能的排查方向
  • Kerberos凭证缺少SQL Server服务票据:当前缓存仅包含域票据(krbtgt),没有针对SQL Server服务主体的票据。SQL Server的服务主体通常为MSSQLSvc/intdb.contoso.com:1433@CONTOSO.COM,需要确认credentials-fetcher是否获取了该服务的票据,或手动通过kinit请求对应SPN的票据。
  • 机器名与gMSA账户同名引发身份混淆:Debian机器名(未加域)和gMSA账户均为gmsa-test,Kerberos解析身份时可能出现冲突,建议修改机器名或确认gMSA的SPN配置无歧义。
  • Kerberos系统配置缺失:检查Debian的krb5.conf文件,确保已正确配置默认域、KDC服务器地址等核心参数,ODBC驱动依赖该配置完成Kerberos认证流程。例如[realms]段需正确设置CONTOSO.COM对应的KDC地址。
  • SQL Server的SPN配置错误:验证Windows服务器上是否已正确注册MSSQLSvc/intdb.contoso.com:1433的SPN,且该SPN已关联到对应的SQL Server服务账户(若使用gMSA,需确保gMSA拥有该SPN的权限)。
  • ODBC连接参数或环境变量未配置:
    • 需显式设置Authentication=ActiveDirectoryIntegrated(ODBC Driver 18的参数),补充到odbc.ini的[MyDB]段中;
    • 手动指定KRB5CCNAME环境变量指向凭证缓存路径,执行export KRB5CCNAME=/var/credentials-fetcher/krbdir/{uid}/gmsa-test/krb5cc后再运行sqlcmd,避免Kerberos读取默认缓存路径失败。
  • Kerberos流量被拦截:虽然1433端口连通,但Kerberos认证需要与域控制器的88端口(UDP/TCP)通信,需确认Debian机器可正常访问该端口,否则无法完成票据验证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 20:40:29