Аутентификация ASP.NET для Windows олицетворяет проблему - PullRequest
2 голосов
/ 11 сентября 2009

В моих предыдущих вопросах я спрашивал, как использовать проверку подлинности Windows в моем приложении. Теперь это работает, пользователи могут войти в систему с этой учетной записью, но у меня есть один сценарий доступа к базе данных, в котором я ничего не могу найти.

В основном у меня будет несколько серверов, и вот проблема.

На некоторых серверах они будут иметь учетные записи проверки подлинности Windows для сервера базы данных SQL Server, поэтому при использовании олицетворения следует использовать их учетные данные. Но я заметил, что это глобальный параметр в web.config (не для каждого соединения), и в одном случае я хочу использовать учетную запись Windows Authentication для приложений (IIS или ASP), а не пользователей. (Доступ к моей базе данных конфигурации)

Как мне этого добиться?

Веб-приложение ASP.NET MVC, размещенное на сервере 2003/2008 IIS 6/7/7,5 с клиентами под управлением Windows XP и выше. Использование SQL Server Express / Standard 2005/2008 смешанного типа.

Ответы [ 3 ]

6 голосов
/ 11 сентября 2009

Олицетворение распространяется на весь сайт, или вы можете включить его вручную. Боюсь, вы не можете вручную отключить его, и это невозможно сделать через строки подключения.

Таким образом, по сути, отключите олицетворение, а затем оберните вызовы базы данных, когда олицетворение необходимо, например:

using System.Security.Principal;

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
    ctx = winId.Impersonate();
    // Do your thing
}
catch
{
}
finally
{
    if (ctx != null)
        ctx.Undo();
}

Руководство MSDN P & P по подражанию asp.net содержит больше.

2 голосов
/ 11 сентября 2009

Вам необходимо настроить делегирование в своей сети, чтобы серверы ASP.NET могли выдавать себя за пользователей на компьютерах с Sql-сервером. Это предполагает, что ваши серверы находятся в сети, контролируемой Active Directory (не рабочие группы), и что серверы sql находятся на разных компьютерах, чем ваши веб-серверы.

Вы бы сконфигурировали делегирование для тех машин сервера баз данных, где вы хотите, чтобы пользователи олицетворяли себя, и не настраивали его для тех серверных компьютеров, для которых учетная запись рабочего процесса ASP.NET должна быть учетной записью, обращающейся к серверу.

Если вы не можете сделать это, вы можете отключить Windows / смешанную аутентификацию на экземплярах Sql Server, для которых вы хотите запретить делегирование, а затем вручную настроить учетную запись Sql Server для подключения в строке подключения в файле web.config. .

0 голосов
/ 11 сентября 2009

Используйте контроллер домена - чтобы он мог распространять одни и те же учетные данные для одного пользователя по всему домену.

Второй прием для рабочих групп - создать одну и ту же учетную запись для подражания (с одинаковыми логином и паролем) на обоих серверах (ASP и SQLServer). Не забудьте предоставить это разрешение на SQLServer.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...