无法使用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
相关产品推荐
相关产品推荐

