SSPI 提供程序:在 Kerberos 数据库中找不到服务器

Posted

技术标签:

【中文标题】SSPI 提供程序:在 Kerberos 数据库中找不到服务器【英文标题】:SSPI Provider: Server not found in Kerberos database 【发布时间】:2022-01-20 13:01:32 【问题描述】:

我正在尝试从 Ubuntu 20.04 客户端连接到位于 windows server 2012R2 上的 MS SQL Server 2014。

领域连接和 Kinit 都很好。

# sudo realm discover org.internal --install=/
org.internal
  type: kerberos
  realm-name: ORG.INTERNAL
  domain-name: org.internal
  configured: kerberos-member
  server-software: active-directory
  client-software: sssd
  required-package: sssd-tools
  required-package: sssd
  required-package: libnss-sss
  required-package: libpam-sss
  required-package: adcli
  required-package: samba-common-bin
  login-formats: %U@org.internal
  login-policy: allow-realm-logins

# kinit -V user@ORG.INTERNAL
Using default cache: /tmp/krb5cc_0
Using principal: user@ORG.INTERNAL
Password for user@ORG.INTERNAL:
Authenticated to Kerberos v5


# klist
Ticket cache: FILE:/tmp/krb5cc_0
Default principal: user@ORG.INTERNAL

Valid starting     Expires            Service principal
12/17/21 10:49:31  12/17/21 20:49:31  krbtgt/ORG.INTERNAL@ORG.INTERNAL
        renew until 12/24/21 10:49:24
12/17/21 10:51:21  12/17/21 20:49:31  MSSQLSvc/ws2012r2:1433@ORG.INTERNAL
        renew until 12/24/21 10:49:24
12/17/21 10:51:57  12/17/21 20:49:31  user@ORG.INTERNAL
        renew until 12/24/21 10:49:24
12/17/21 10:52:30  12/17/21 20:49:31  MSSQLSvc/ws2012r2.org.internal:1433@ORG.INTERNAL
        renew until 12/24/21 10:49:24

当我执行 sqlcmd 时,出现以下错误。请注意,如果我指定用户名和密码(sql 身份验证),它将起作用。

# sqlcmd -S 20.12.34.567
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : SSPI Provider: Server not found in Kerberos database.
Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Cannot generate SSPI context.


SPN is below
setspn -L user

Registered ServicePrincipalNames for CN=User ABC,CN=Users,DC=org,DC=internal: 
        MSSQLSvc/ws2012r2:1433 

非常感谢任何帮助!

这里有一个问题,我确实生成了一个 keytab 文件。但是,告诉 Windows Server 2012r2 上的 SQL Server 2014 使用 keytab 文件的命令是什么?

【问题讨论】:

可能是 DNS 问题。如果在客户端计算机上,您正向查找服务器的名称并反向查找服务器的 IP 地址,它们会产生镜像结果吗? 可能是时钟同步问题。服务器、KDC 和客户端都 NTP 同步了吗? 【参考方案1】:

通过 IP 访问服务器将不允许基于 DNS 名称的 SPN 工作。带有 IP 地址的 SPN 未注册。使用服务器的域名。

【讨论】:

非常感谢! sqlcmd -S ws2012r2 有效!我没有意识到我需要使用域名

以上是关于SSPI 提供程序:在 Kerberos 数据库中找不到服务器的主要内容,如果未能解决你的问题,请参考以下文章

使用 SSPI 支持多进程的 kerberos 约束委派

来自 SSPI 的 KRB_AP_REQ 票证

WCF 安全支持提供程序接口 (SSPI) 协商失败

WCF 服务 - 身份验证/SSPI 错误

什么叫kerberos

[Kerberos] Kerberos教程