Безопасность IIS7, SQL 2008 и ASP.NET MVC - PullRequest
17 голосов
/ 18 января 2009

У меня есть приложение ASP.NET MVC, над которым я работаю. Я разрабатывал его на Windows Server 2003 с IIS6 и SQL 2008 Express, и все работало замечательно. Недавно я решил попробовать бета-версию Windows 7, поэтому теперь я использую IIS7 и столкнулся с проблемой подключения к моей базе данных, которую, похоже, не могу понять.

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

"Невозможно открыть базу данных" MyDatabaseName ", запрошенную при входе в систему. Ошибка при входе. Ошибка входа для пользователя 'IIS APPPOOL \ MyApplicationName'. "

Я, очевидно, неправильно настроил некоторые настройки безопасности, но я не могу найти хорошую документацию по как , чтобы правильно ее настроить. Я пытался дать разрешения NETWORK SERVICE для базы данных, но это не сработало. Кто-нибудь знает, что мне нужно сделать, чтобы дать разрешения «IIS APPPOOL \ MyApplicationName» для этой базы данных? Я что-то упускаю из виду?

Спасибо ...

Ответы [ 15 ]

31 голосов
/ 19 октября 2009

Если вы НЕ используете ActiveDirectory, игнорируйте все другие решения, приведенные выше. Путаница проистекает из нового значения параметра ApplicationPoolIdentity по умолчанию в IIS 7.5 (MS продолжает изменять механизмы идентификации)

  1. Откройте SQL Management Studio , подключитесь к локальному компьютеру как администратор.
  2. Разверните ветку Security .
  3. Щелкните правой кнопкой мыши Логины и выберите Новый логин
  4. В поле Имя для входа введите « IIS APPPOOL \ MyApplicationName ». НЕ нажмите кнопку поиска. Профиль пользователя фактически не существует на локальной машине, он динамически создается по требованию.
6 голосов
/ 23 июня 2009

Ошибка означает, что веб-приложение не имеет доступа к вашей базе данных. В Windows 7 / IIS 7 по умолчанию каждый пул приложений имеет своего пользователя. Кажется, идея состоит в том, чтобы улучшить безопасность, ограничивая возможности этого веб-приложения (в случае, если оно подвергается риску и контролируется извне). Вы можете изменить пользователя, под которым запускается пул приложений, но это будет противоречить его собственному назначению. Похоже, что лучший способ дать пользователю пула необходимые разрешения (и не более того).

В SQL Management Studio подключитесь к серверу, к которому вы хотите подключить свое веб-приложение (протестировано с SQL Server 2008). Перейти к

Security -> Log ins

щелкните правой кнопкой мыши, Новый вход в систему. В появившейся форме оставьте все по умолчанию, кроме имени пользователя, где вам нужно ввести любое имя пользователя, которое пытается использовать веб-приложение, в данном случае «IIS APPPOOL \ MyApplicationName». Обратите внимание, что функция поиска в этом диалоговом окне не может найти или проверить правильность этого пользователя, но тем не менее она работает.

Все еще в SQL Management Studio, подключенной к серверу, перейдите на

Databases -> *YOUR-DATABASE* -> Security -> Users

щелкните правой кнопкой мыши и новый пользователь. Я не уверен, имеет ли какое-либо влияние поле имени пользователя, я просто установил последнюю часть имени пользователя, например MyApplicationName. Затем я установил имя для входа в IIS APPPOOL \ MyApplicationName. Вы можете нажать на кнопку ... и использовать проверку и поиск, на этот раз это работает. Если вы не выполните предыдущий шаг, пользователь не будет здесь присутствовать. Затем предоставьте ему любые разрешения, которые вы хотите этому пользователю, например db_datareader.

И это все, вы дали разрешение. Если вашей проблемой была нехватка разрешений, то она должна быть решена (или, по крайней мере, я просто так решил).

У меня всего 2 часа опыта работы с IIS и около трех недель с SQL Server и менее двух месяцев с технологиями Microsoft, поэтому, следуйте моим советам, я могу ошибаться, (Если другой человек может подтвердить, что это правильные шаги, смело удаляйте последнее предупреждение).

2 голосов
/ 27 ноября 2012

Эрик Фальскен прав, однако ему не хватает отображений пользователей. Так что щелкните правой кнопкой мыши на новом IIS APPPOOL / DefaultAppPool, щелкните «Свойства», а затем установите флажки для: 1) базы данных master и yourdatabase 2) db_owner и public

2 голосов
/ 09 апреля 2009

Вот статья, которая объясняет, почему AppPoolIdentities используются; в основном речь идет об усиленной безопасности: http://learn.iis.net/page.aspx/624/application-pool-identities/

(В этой статье утверждается, что я могу использовать эти виртуальные учетные записи, как и любую обычную учетную запись, но на моем Windows Server 2008 это не представляется возможным; добавление, например, IIS AppPool \ DefaultAppPool просто приводит к ошибке: домен, указанный в диалоговом окне «Выбор местоположения», и поэтому недопустимый. ")

1 голос
/ 27 сентября 2011

Использование доверенного соединения в режиме аутентификации Windows: ОС: Windows 7 32 бит IIS 7, Sql Server 2008 R2 Express Строка подключения: cn.open "Поставщик = SQLOLEDB.1; Интегрированная безопасность = SSPI; Постоянная информация о безопасности = Ложь; Начальный каталог = тест; Источник данных = mycomputername \ sqlexpress;" (если имя экземпляра - sqlexpress или любое другое имя экземпляра, которое вы использовали)

Если вы не можете подключиться к серверу sql с использованием аутентифицированного подключения в режиме Windows к серверу SQL 2008.

NT AUTHORITY \ IUSR У учетной записи может не быть разрешения на сервере sql для авторизации соединения с базой данных.

Подключите Sql-сервер, используя режим аутентификации Windows. Разверните узел безопасности. Выберите NT AUTHORITY \ IUSR (ЕСЛИ НЕ ТОГДА ДОБАВЬТЕ НОВЫЙ ВХОД ДЛЯ ТОГО) Нажмите «Сопоставление пользователей» в разделе «Выбрать страницу в окне свойств входа в систему». Выберите базу данных, к которой вы пытаетесь подключиться. Выберите следующие разрешения в разделе «Членство в роли базы данных для: ......» 1. db_datareader 'это позволяет открыть соединение 2. db_datawriter 'это позволяет получать записи данных из datatable

1 голос
/ 02 октября 2009

Если вы последуете совету мистера Фернандеса, у вас все заработает. Это новый способ предоставления наименьших привилегий сайту.

Так что не делайте легкую, менее безопасную вещь (СЕТЬ СЕРВИС) Сделать правильную вещь. Прокрутите вверх. ;)

1 голос
/ 19 января 2009

оставить тяжелые проблемы для кого-то еще -

создать пользователя SQL и использовать аутентификацию SQL. : D

1 голос
/ 18 января 2009

Мне знакома идея предоставления пользователю разрешения, под которым выполняется приложение ... моя проблема в том, что в IIS7 "пользователь" кажется виртуальным или что-то странное в этом роде. До того, как я изменил свойство «Identity» в свойствах пула приложений на NETWORK SERVICE, для него было установлено значение «ApplicationPoolIdentity», и я получал сообщение об ошибке: «IIS APPPOOL \ MyApplicationName» не имел доступа к базе данных. Когда я попытался добавить «IIS APPPOOL \ MyApplicationName» user в базу данных, он, похоже, не существовал ... не то чтобы я все равно смог его найти.

Так что моя главная проблема - не понять или не найти хорошую документацию о том, как работает модель безопасности IIS7. Когда я создавал приложение, казалось, что он создает AppPool с тем же именем только для этого приложения. Я не знаю точно, какие изменения мне нужно внести, чтобы дать приложению и / или пользователю, с которым оно работает, права доступа к базе данных, учитывая тот факт, что пользователь, который запускает AppPool, не выглядит как на самом деле существует.

Как я уже говорил, изменение идентификатора AppPool на NETWORK SERVICE пока что сработало, но я пытаюсь выяснить, что лучше всего подходит для такого рода вещей в IIS7. Спасибо.

1 голос
/ 18 января 2009

Первый шаг - проверить, под какой учетной записью работает ваш сайт. Создайте простую страницу aspx с:

<%@ Page Language="C#" %>
<% Response.Write(System.Security.Principal.WindowsIdentity.GetCurrent().Name); %>

Если вы используете проверку подлинности Windows, учетная запись WindowsIdentity должна иметь имя входа на SQL Server. Под Security -> Logins -> Login New вы захотите добавить любое имя, отображаемое WindowsIdentity, и убедитесь, что выбрана аутентификация Windows.

Если вам когда-нибудь понадобится переместить базу данных на отдельный компьютер, вам придется создать учетную запись домена и использовать олицетворение в своем файле web.config. Google <identity impersonate="true"> для получения дополнительной информации.

1 голос
/ 18 января 2009

Что ж ... изменение свойства ApplicationPoolIdentity и установка его в NETWORK SERVICE, похоже, устранили мои проблемы. Не уверен, что это «правильный» способ сделать что-то или нет (например, я не уверен, что это рекомендуемый способ сделать что-то в IIS7 или нет), но, похоже, он, по крайней мере, работает и заставил меня пройти это зависание на данный момент. Спасибо.

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