SharePoint и - PullRequest
       40

SharePoint и

3 голосов
/ 30 июня 2009

Я хотел бы использовать встроенную аутентификацию для доступа к базе данных SQL из веб-части. Он должен использовать удостоверение пула приложений IIS.

По умолчанию вы получите ошибку:

System.Data.SqlClient.SqlException: Login failed for user 'SERVER\IUSR_VIRTUALMACHINE'.

Поскольку в web.config олицетворение имеет значение true:

<identity impersonate="true" />

Я могу установить значение false, и код базы данных будет работать. Сайты с анонимным доступом также будут работать. Однако на любом сайте SharePoint, который использует аутентификацию, произойдет сбой, так что это не совсем решение.

Чтобы решить эту проблему, мне нужно будет инкапсулировать весь свой код доступа к базе данных для запуска с повышенными привилегиями, это как SharePoint делает это внутренне? Почему-то это не самое эффективное решение. Это все еще путь, просто используйте безопасность SQL для доступа к базам данных из пользовательских веб-частей SharePoint?

Ответы [ 3 ]

4 голосов
/ 30 июня 2009

Элементы <identity /> и <authentication /> в файле web.config вместе определяют учетную запись, которая используется для подключения к SQL Server при использовании встроенной аутентификации.

Когда настроено <authentication mode="Windows" />, вы используете IIS для аутентификации пользователей. Я предполагаю, что ваш ваш web.config содержит:

<authentication mode="Windows" />
<identity impersonate="true" />

и что IIS настроен для разрешения анонимных пользователей. Установка <identity impersonate="true" /> заставляет IIS передавать удостоверение учетной записи анонимного доступа IIS на SQL Server.

Как указывает Ларс, использование SPSecurity.RunWithElevatedPrivileges позволит достичь того, что вы хотите. Не думаю, что вы заметите какое-либо заметное влияние на производительность, но это то, что вы можете проверить: -)

3 голосов
/ 30 июня 2009

Используйте SPSecurity.RunWithElevatedPrivileges для запуска кода в контексте идентификатора пула приложений.

0 голосов
/ 30 июня 2009

Это неверно. Поскольку для <identity impersonate="true" /> установлено значение true, ASP.NET / IIS будет запускать поток как пользователь, вошедший в систему в данный момент (т.е. не учетная запись пула приложений, а фактический пользователь, вошедший на веб-сайт).

Здесь происходит что-то еще. Не могли бы вы опубликовать строку подключения для пользовательской базы данных? (минус личные данные вне курса)

...