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

234

Я использую веб-сайт 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 ...)

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

Максимум
источник

Ответы:

382

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

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

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

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

др.
источник
4
Извините за возрождение старого поста, но кто-нибудь знает, имеет ли это какое-либо влияние на безопасность в реальной среде?
Доубурт
34
удивительно полезный, но невероятно (и хреново) Microsoftian.
Эван Нэгл
16
Вот это да. «Не нажимайте кнопку поиска» в шаге 3, кажется, имеет значение (?)
Джедиджа
16
Не произойдет ли это, если экземпляр SQL-сервера находится на другом сервере? Например - как делает SQL1знать о местном / виртуальных IIS AppPool\MyAppPoolна WEB1?
one.beat.consumer
3
Есть ли какое-либо решение, если ваш веб-сервер и SQL-сервер находятся на разных компьютерах !! ?? Я могу найти логин, но не могу создать новый логин SQL. (Если я не проверяю имена ... все равно не работает)
Дан Б
63
CREATE LOGIN [IIS APPPOOL\MyAppPool] FROM WINDOWS;
CREATE USER MyAppPoolUser FOR LOGIN [IIS APPPOOL\MyAppPool];
Райан Пречел
источник
1
Приятно - хотя принятый ответ верен - мне удалось попасть в ситуацию, когда Management Studio не работала, поэтому это сырое TSQL-решение было тем, что мне было нужно.
Эндрю Паттерсон
4
Обратите внимание на новичков, подобных мне: убедитесь, что этот запрос выполнен к базе данных, к которой вы хотите получить доступ с помощью пула приложений IIS, второй оператор находится на уровне базы данных. Вам может потребоваться сделать пользователя участником определенных ролей базы данных и предоставить ему разрешения для таких схем, как dbo.
MarioDS
Как только я обнаружил, что невозможно добавить логины IIS APPPOOL через графический интерфейс SSMS, я запустил ваш скрипт. СПАСИБО! ИСПОЛЬЗОВАТЬ, чтобы было возможно - не в SSMS 18! Я полагаю, что теперь это «особенность»
MC9000
6

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

Дейв Маркл
источник
6

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

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

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

Стивен
источник
2

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

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

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

keithwarren7
источник
0

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

Section: system.webServer/security/authentication/windowsAuthentication

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

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

введите описание изображения здесь

Дэн Б
источник
Я следовал тому же процессу, но проблема не была решена. Вы, должно быть, тоже что-то сделали, не могли бы вы поделиться?
RSB
@RSB - ты выполнил все остальные шаги? Вы настроили appPools и дали им разрешения на файлы, где находится ваш сайт? Вы добавили имя сервера в качестве логина с разрешениями на SQL Server? Прикладывали ли вы appPool на ваш SQL Server с разрешениями? Вы изменили IIS для использования проверки подлинности Windows? Какие ошибки вы получаете? Работает ли это в вашей среде разработки, а не на производстве?
Дан Б
Я настроил appPool, но как дать им разрешение на файлы, где находится сайт? Как добавить имя сервера в качестве логина с разрешениями на сервер SQL? Я также добавил appPool в SQL Server с разрешениями. Как изменить IIS для использования WindowsAuthentocation.It работает в моей среде разработки, когда IIS и сервер sql находятся на одном компьютере, но выдает error-System.ComponentModel.Win32Exception: ошибка Access Denied, когда сервер IIS и Sql находятся на разных компьютерах. Пожалуйста, предложите.
RSB
если вы дадите мне свою электронную почту, я отправлю вам документ, который я сделал о том, как все это сделать ... слишком много, чтобы добавить его сюда ...
Дэн Б.
@RSB Я отправил вам письмо. Удачи.
Дан Б
0

В моем случае проблема заключалась в том, что я начал создавать образец проекта 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. В конце концов я застрял с "не удается получить доступ к ошибкам базы данных"

arokanika
источник