Проблема с подключением к базе данных из рабочего процесса sharepoint с интегрированными параметрами безопасности

#sharepoint

Вопрос:

Всем доброе утро,

У меня возникла проблема с использованием проекта рабочего процесса SharePoint (C#, VS 2008) и подключением к базе данных. Вот строка подключения к моей базе данных:

 Data Source=DBSERVER;Initial Catalog=DBNAME;Integrated Security=True; 
 

Когда я пытаюсь запустить следующий код, я получаю следующую ошибку …

 SqlConnection dbEngine = new SqlConnection(Constants.DBCONNECTION_STRING);
dbEngine.Open(); 
 

«Не удалось войти в систему для пользователя» ДОМЕНИМЯ_МАШИНЫ$»»

Что мне нужно, так это пройти через учетные данные вошедшего пользователя. У меня включено олицетворение, но, похоже, оно не проходит. Любые предложения были бы очень признательны.

Заранее благодарю вас за любые советы,

Скотт Веркаски

Ответ №1:

Любой доступ к БД должен выполняться от имени учетной записи службы Windows по соображениям безопасности и объединения подключений.

Что касается Контекста безопасности рабочего процесса, см.:

SharePoint, Рабочие процессы и безопасность http://cglessner.blogspot.com/2008/09/sharepoint-workflows-and-security.html

Декларативные рабочие процессы и пользовательский контекст http://blogs.msdn.com/sharepointdesigner/archive/2008/09/28/declarative-workflows-and-user-context.aspx

Безопасность и разработка приложений в SharePoint: Рабочий процесс первых шагов http://www.microsoft.com/technet/community/columns/secmvp/sv0408.mspx#EACAC

Ответ №2:

Находятся ли веб-интерфейс и SQL-сервер в одном и том же окне ?

Если нет, вам придется настроить Kerberos, чтобы разрешить распространение учетных данных.

Ответ №3:

Вы не можете этого сделать — рабочий процесс не выполняется в контексте пользователя. Рабочие процессы выполняются асинхронно. Только (HTTP) веб-страницы-Запросы выполняются в контексте пользователя (если вы включаете олицетворение). Вы не можете передать олицетворение в рабочий процесс. Для восстановления олицетворения в рабочем процессе (чего вам не следует делать) потребуется имя пользователя И пароль ИЛИ переход по протоколу (тогда процесс должен будет выполняться в системе).

Кроме того, у вашего приложения возникает серьезная проблема с дизайном, если вы пытаетесь получить доступ к базе данных из контекста олицетворенного пользователя. Это испортит объединение соединений и серьезно повредит производительности. Это, как правило, недопустимо.

Это не проблема kerberos. Процесс пытается получить доступ к базе данных от имени учетной записи компьютера, которая сообщает, что процесс выполняется либо как сетевая служба, либо как система (win 2008 и более поздние версии).