我们有臭名昭著的 Kerberos 双跃点问题。
这是一个全新的域,正在从以前使用模拟和委派的另一个提供商迁移而来。我们已将操作系统升级到最新的 SQL Server (2017)。
WPF 应用程序(使用域凭据)-> Web 服务(IIS 10 上的 WCF 应用程序)-> SQL 2017(命名实例)
Web 服务在域帐户下运行。 Web 服务注册了一个 spn,匿名身份验证被禁用,表单例份验证,ASP.NET 模拟和 Windows 身份验证被启用。提供程序是“协商和 NTLM”,禁用“内核模式”,启用“使用应用程序池凭据”。 SPN 创建:
HTTP/<url of web service> <AppPool Creds>
我们能够通过远程计算机上的浏览器登录网络服务,输入域凭据并获得预期的响应(显示网页)。 IIS 日志按预期显示域用户凭据。
SQL 服务器是一个命名实例,在域凭据下运行。创建的 SPN:
MSSQLSvc/<fqdn>:<Instance> <SQL Domain Creds>
MSSQLSvc/<sql server netbios>:<Instance> <SQL Domain Creds>
MSSQLSvc/<fqdn>:<port> <SQL Domain Creds>
MSSQLSvc/<sql server netbios>:<port> <SQL Domain Creds>
AD 中的 IIS 应用程序池用户帐户设置为将端口和命名实例的约束委派给 SQL 服务器。
通过软件登录web服务时(WPF调用WCF服务,没有调用数据库),看到正常响应。
当通过软件登录到带有数据库调用的 Web 服务时,sql 事件探查器显示匿名登录。在 IIS 框上启用 Kerberos 日志记录后,收到以下错误:
Error Code: 0xd KDC_ERR_BADOPTION
Extended Error: 0xc0000225 KLIN(0)
Server Name: MSSQLSvc/<sql server fqdn>:49942
Target Name: MSSQLSvc/<sql server fqdn>:49942@<domain.com>
我们也尝试了无约束委托(delegate),但得到了同样的结果。
SETSPN -X 显示没有重复项。
预先感谢您的帮助!
最佳答案
当其他所有方法都失败时,您确实花了很多天来解决问题并阅读了 Internet 上的每篇文章:
REBOOT
是的。这就是解决办法。重新启 Action 为委派权限的服务器的 IIS 服务器,解决了这个问题。
对于那些希望在 IIS 和 SQL 实例之间快速轻松地设置约束委派(两者都在自定义域凭据下运行)的用户,请完全按照上述设置并重新启动。
最良好的祝愿。
关于sql-server - Kerberos 双跳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50048601/