Назад | Перейти на главную страницу

Невозможно подключиться к базе данных с помощью Win Auth из веб-приложения ASP.Net, размещенного в IIS7

У меня есть веб-приложение, размещенное на Windows Server 2008 64 Bit с IIS 7 и SQL Server 2008. Учетная запись пула веб-приложений - это сетевая служба, и я добавил эту учетную запись для входа в SQL Server 2008 и сопоставил ее с пользователем в базе данных с правами dbowner .

Этот веб-сайт находится в ASP.Net 2.0 и использует проверку подлинности с помощью форм для защиты доступа к некоторым из своих ресурсов (не ко всем), поэтому в IIS 7 включены анонимный доступ, Imersonation = True и проверка подлинности с помощью форм. Веб-приложение использует элементы управления поставщиками членства.

Когда сайт запускается; внутри «Запуск приложения» он пытается подключиться к базе данных и прочитать некоторые конфигурации запуска. Строка подключения к базе данных сохраняется в web.config. Ниже приводится строка подключения.

Data Source=XXXXX; Initial Catalog=XXXXX; Integrated Security=SSPI; Trusted_Connection=True;

Однако при запуске приложения ему не удалось подключиться к базе данных, и я обнаружил следующие 3 записи в журнале событий.

Подтверждение связи SSPI не удалось с кодом ошибки 0x8009030c при установлении соединения со встроенной безопасностью; соединение было закрыто. [КЛИЕНТ:]


Ошибка входа. Логин из ненадежного домена и не может использоваться с аутентификацией Windows. [КЛИЕНТ:]


Event code: 3005 
Event message: An unhandled exception has occurred. 
Event time: 4/26/2011 9:22:05 PM 
Event time (UTC): 4/26/2011 6:22:05 PM 
Event ID: 71a4b2cd8d40492ab89af3430cf42ea5 
Event sequence: 2 
Event occurrence: 1 
Event detail code: 0 

Application information: 
    Application domain: /LM/W3SVC/5/ROOT-1-129483157247676684 
    Trust level: Full 
    Application Virtual Path: / 
    Application Path: C:\LMS Projects\Deployment\Web Applications\Microsoft Dynamics CRM Customer LMS Portal\ 
    Machine name: LMS 

Process information: 
    Process ID: 3688 
    Process name: w3wp.exe 
    Account name: NT AUTHORITY\NETWORK SERVICE 

Exception information: 
    Exception type: LoyaltyException 
    Exception message: Exception of type 'LMS.Helpers.LoyaltyException' was thrown. 

Request information: 
    Request URL: http://localhost:6666/default.aspx 
    Request path: /default.aspx 
    User host address: ::1 
    User:  
    Is authenticated: False 
    Authentication Type:  
    Thread account name: NT AUTHORITY\NETWORK SERVICE 

Thread information: 
    Thread ID: 4 
    Thread account name: NT AUTHORITY\NETWORK SERVICE 
    Is impersonating: False 
    Stack trace:    at ASP.global_asax.Application_Start() in c:\LMS Projects\Deployment\Web Applications\Microsoft Dynamics CRM Customer LMS Portal\Global.asax:line 27

Показанное выше исключение - это настраиваемое исключение, которое я генерирую после обработки исключения платформы, чтобы не ошибиться с ошибкой в ​​коде. Этот код отлично работает в среде Windows Server 2003 и IIS 6.0.

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

Вот пара рекомендаций:

  • Если вы дадите каждому сайту свой собственный пул приложений, то для вашего анонимного пользователя настройте его на использование пользователя пула приложений. Тогда вам нужно поддерживать только одного пользователя.
  • Установите пользователя пула приложений на что-нибудь, кроме сетевой службы. Поскольку вы используете IIS 7.0 (WS08 RTM), труднее работать с пользователем IIS APPPOOL \ AppPoolName, и, как правило, работать напрямую с NETWORK SERVICE не очень удобно. Есть некоторые известные бреши в защите прав доступа, и предоставление разрешения для этой учетной записи открывает его и для других приложений. Я бы, вероятно, просто создал специального пользователя, назначил его пулу приложений, предоставил разрешения на диске, а затем предоставил доступ к базе данных.