Linq to SQL в ASP.Net MVC запускается как сетевая служба при использовании олицетворения - PullRequest
0 голосов
/ 15 декабря 2009

У меня есть действие контроллера ASP.Net MVC, которое создает экземпляр объекта DataContext, и в настоящее время я передаю строку подключения непосредственно в конструктор. Я использую Олицетворение, и я проверил, что текущий пользователь в действии контроллера - текущий Windows Auth. пользователь веб-приложения, однако при запуске трассировки SQL запрос всегда выполняется как сетевая служба. На объект контекста данных ссылаются в другом проекте из веб-приложения, но я передаю строку подключения непосредственно в конструктор, поэтому это не должно быть проблемой. Вот что в данный момент находится в действии контроллера:

        // verified the user is the current Windows Auth. user of the web app
        var user = this.User;

        var connectionString = "Data Source=serverName;Initial Catalog=dbName;Integrated Security=true";
        var context = new CustomDataContext(connectionString);
        var test = context.Customers.Select(i => i.fullname).ToList();

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

Ответы [ 2 ]

2 голосов
/ 15 декабря 2009

Итак, вы видите проблему делегирования. Идентификационные данные не распространяются автоматически за пределы IIS.

Если вы настроили все для проверки подлинности Windows, вам нужно обернуть открытые вызовы базы данных, чтобы временно использовать идентификатор Windows для контекстов вне вашего веб-приложения. Код выглядит следующим образом

using (((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate())
{
    // Perform database or network access here
}

Вы, вероятно, захотите обернуть это в проверку, которая проверяет текущее удостоверение и удостоверяется, что это удостоверение Windows

0 голосов
/ 15 декабря 2009

Скорее всего, вы видите Network Service, потому что это учетная запись по умолчанию, под которой запускаются пулы приложений в IIS 6 и 7.

В целом, в приложениях asp.net есть два способа олицетворения:

  1. Тег в web.config
  2. Изменение удостоверения пула приложений в IIS

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

Однако, похоже, что вы хотите выдать себя за пользователя Windows Auth за каждого вошедшего в систему пользователя. Если это так, см. Эта статья базы знаний MS для примера кода - в частности, раздел под названием Олицетворение конкретного пользователя в коде

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