Добавление идентификаторов IIS 7 AppPool в качестве учетных записей SQL Server

Я использую веб-сайт IIS 7 с AppPool интегрированного конвейерного режима. AppPools НЕ работает под идентификатором NetworkService и т. Д. (По назначению), но использует свой собственный идентификатор AppPool (IIS AppPool\MyAppPool).

Это так называемая служебная учетная запись или виртуальная учетная запись. (учетная запись пользователя, которая не является полной учетной записью...)

Я хотел бы дать этой учетной записи службы (IIS AppPool \ MyAppPool) разрешения для подключения к моему SQL Server 2008 Express (работающему в режиме смешанной аутентификации).

В то время как SQL Server может добавить любую обычную учетную запись пользователя, виртуальная учетная запись IIS AppPool \ MyAppPool не может быть добавлена ​​к действительным входам в систему (SQL Server говорит, что учетная запись не может быть найдена).

Есть ли какая-то хитрость, что мне нужно включить, чтобы виртуальные учетные записи работали? (процесс w3wp.exe выполняется под этим именем в соответствии с taskmgr, но я не могу использовать учетную запись в безопасности NTFS...)

Спасибо за вашу помощь!

10 ответов

Решение

"IIS APPPOOL\AppPoolName" будет работать, но, как упоминалось ранее, оно не является действительным именем AD, поэтому при поиске его в диалоговом окне "Выбор пользователя или группы" оно не отображается (на самом деле, он найдет его, но он будет считать его действительной системной учетной записью, и попытается обработать его как таковой... который не будет работать и выдаст сообщение об ошибке, что он не найден).

Как я получил это работать:

  1. В SQL Server Management Studio найдите папку " Безопасность " (папка безопасности на том же уровне, что и папки "Базы данных", "Объекты сервера" и т. Д., А не папка безопасности в каждой отдельной базе данных).
  2. Щелкните правой кнопкой мыши логины и выберите "Новый вход"
  3. В поле Имя для входа введите IIS APPPOOL \ YourAppPoolName - не нажимайте кнопку поиска
  4. Заполните любые другие значения, которые вам нравятся (например, тип аутентификации, база данных по умолчанию и т. Д.)
  5. Нажмите ОК

Пока имя AppPool действительно существует, логин должен быть создан.

CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];

Вы можете решить вот так,

  1. Откройте "Пулы приложений",
  2. Вы должны щелкнуть правой кнопкой мыши по выбранному пулу приложений. Затем выберите "Дополнительные настройки".
  3. Щелкните три точки на вкладке "Удостоверение", затем выберите "Локальная система" в поле "Встроенная учетная запись".

Если вы это сделаете, вам не нужно создавать пользователя в базе данных.

В качестве дополнительного примечания процессы, использующие виртуальные учетные записи (NT Service\MyService и IIS AppPool\MyAppPool), все еще работают под учетной записью "NETWORK SERVICE", как показано в этом посте http://www.adopenstatic.com/cs/blogs/ken/archive/2008/01/29/15759.aspx. Единственное отличие состоит в том, что эти процессы являются членами групп "NT Service\MyService" или "IIS AppPool\MyAppPool" (поскольку на самом деле это группы, а не пользователи). Это также является причиной того, что процессы аутентифицируются в сети как на компьютере так же, как учетная запись NETWORK SERVICE.

Способ обеспечения безопасного доступа заключается не в том, чтобы зависеть от этой учетной записи, не имеющей привилегии NETWORK SERVICE, а в том, чтобы предоставить больше разрешений специально для "NT Service\MyService" или "IIS AppPool\MyAppPool" и удалить разрешения для "Users", если это необходимо.

Если у кого-то есть более точная или противоречивая информация, пожалуйста, пишите.

Если вы работаете на разных компьютерах, вам нужно либо использовать NETWORK SERVICE, LOCAL SYSTEM, доменную учетную запись или управляемую учетную запись SQL 2008 R2 (если она у вас есть) (что я предпочел бы, если бы у вас была такая инфраструктура), Вы не можете использовать учетную запись, которая не видна домену Active Directory.

Посмотрите на: http://www.iis.net/learn/manage/configuring-security/application-pool-identities

USE master
GO
sp_grantlogin 'IIS APPPOOL\<AppPoolName>'

USE <yourdb>
GO
sp_grantdbaccess 'IIS APPPOOL\<AppPoolName>', '<AppPoolName>'
sp_addrolemember 'aspnet_Membership_FullAccess', '<AppPoolName>'
sp_addrolemember 'aspnet_Roles_FullAccess', '<AppPoolName>'

Это может быть то, что вы ищете...

http://technet.microsoft.com/en-us/library/cc730708%28WS.10%29.aspx

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

Я понял это методом проб и ошибок... реальная трещина в броне была мало известной настройкой в ​​IIS в Configuration Editor для сайта в

Section: system.webServer/security/authentication/windowsAuthentication

From: ApplicationHost.config <locationpath='ServerName/SiteName' />

называется useAppPoolCredentials (который установлен в False по умолчанию. Установите это в True и жизнь снова становится великой!!! Надеюсь, это спасет боль для следующего парня....

В моем случае проблема заключалась в том, что я начал создавать образец проекта MVC Alloy с нуля, используя расширение Visual Studio/Episerver, и он работал нормально при выполнении с использованием локальной Visual Studio iis express. Однако по умолчанию он указывает базу данных sql на LocalDB, и когда я развернул сайт на локальном IIS, он начал выдавать ошибки, некоторые из первоначальных ошибок, которые я исправил: 1. Добавление привязки URL-адреса локального сайта к C:/Windows/System32/drivers/etc/hosts 2. Затем, отредактировав application.config, нашел местоположение файла, щелкнув правой кнопкой мыши IIS express в правом нижнем углу экрана при запуске сайта с использованием Visual Studio и добавив привязку туда для локального URL-адреса iis. 3. Наконец, я застрял с "неспособностью получить доступ к ошибкам базы данных", для которой я создал пустую новую БД в Sql Express и изменил строку подключения в веб-конфигурации, чтобы указать на мою новую БД, а затем в консоли диспетчера пакетов (с использованием Visual Studio) выполнить Команды БД Episerver, такие как - 1. initialize-epidatabase 2. update-epidatabase 3. Convert-EPiDatabaseToUtc

Для ApplicationPoolIdentity, добавьте логин / пользователя в MSSQL как IIS_IUSRS что соответствует пулу по умолчанию.

Другие вопросы по тегам