我有一台托管 Sharepoint 2010 的服务器。我还有另一台托管 SQL Server 2008 R2 的服务器。SharePoint 基于 Kerberos/声明。
在我的 SharePoint 上,我安装了一个自定义的 Web 部件,它使用标准连接字符串 ( Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;
) 连接到 SQL Server 机器。
问题是当 webpart 尝试连接到 sql server 时,我收到以下消息:
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
我们做了什么:
- 验证所有 spn/delegation/trusts 的东西 - 一切似乎都很好。
- 尝试通过 UDL 文件直接从 sharepoint 机器连接到 sql server,它可以工作。
- 尝试将 webpart 作为单机服务器上的独立 ASPX 页面来证明代码应该可以工作,并且可以工作。
- Wireshark -> 当 ANONYMUS LOGON 尝试连接到 sql server(很明显)时,我们可以看到 KDC_ERR_S_PRINCIPAL_UNKNOWN。
- SharePoint 开发人员仪表板向我们显示了我们当前的用户名,它不是 ANONYMUS。
- webpart 中的跟踪显示了两件事:HTTPCONTEXT 设置为我当前的用户,Thread.Current 也是如此。
- 使用 SQL Profiler,我们可以看到请求来自 ANONYMUS
- 我们试图从另一个定制的 webpart 访问另一台服务器上的 web 服务,但由于同样的原因 (ANONYMUS) 失败了。
我们缺少什么?问题确实似乎是 SharePoint 无法将当前用户凭据发送到另一台服务器(sql 与否)。