У меня есть сервер, на котором размещается Sharepoint 2010. У меня есть другой сервер, на котором размещен SQL Server 2008 R2. SharePoint основан на протоколе Kerberos / утверждениях.
На своем SharePoint я установил специально созданную веб-часть, которая подключается к компьютеру с SQL Server с помощью стандартной строки подключения (Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;
).
Проблема в том, что когда веб-часть пытается подключиться к серверу sql, я получаю следующее сообщение:
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'
Что мы сделали:
- Проверить все spn / делегирование / доверяет вещи - вроде все в порядке.
- Пытался подключиться напрямую с машины sharepoint через файл UDL к серверу sql, и он работает.
- Пробовал использовать веб-часть как отдельную страницу ASPX на сервере с одной машиной, чтобы доказать, что код должен работать, и он работает.
- Wireshark -> Мы видим KDC_ERR_S_PRINCIPAL_UNKNOWN, когда ANONYMUS LOGON пытается подключиться к серверу sql (очевидно).
- Панель разработчика SharePoint показывает нам наше текущее имя пользователя, которое не является АНОНИМОМ.
- Следы в веб-части показывают две вещи: HTTPCONTEXT установлен для моего текущего пользователя, как и Thread.Current.
- Используя SQL Profiler, мы видим, что запрос исходит от ANONYMUS.
- Мы попытались получить доступ к веб-службе на другом сервере с другой настраиваемой веб-части, но это не удалось по той же причине (ANONYMUS).
Что нам не хватает? Проблема действительно в том, что SharePoint не может отправить учетные данные текущего пользователя на другой сервер (sql или нет).