Подтвердить что ты не робот

Безопасность IIS7, SQL 2008 и ASP.NET MVC

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

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

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

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

Спасибо...

4b9b3361

Ответ 1

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

  • Откройте SQL Management Studio, подключитесь к локальной машине в качестве администратора.
  • Разверните ветвь Безопасность.
  • Щелкните правой кнопкой мыши Logins и выберите Новый вход
  • В поле Имя пользователя введите IIS APPPOOL\MyApplicationName ". НЕ нажмите кнопку поиска. Профиль пользователя dosn't фактически существует на локальной машине, он динамически создается по требованию.

Ответ 2

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

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

Security -> Log ins

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

Находясь в SQL Management Studio, подключенной к серверу, перейдите в

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

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

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

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

Ответ 3

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

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

Ответ 4

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

Ответ 5

Эта ошибка обычно означает, что пользователь, на котором работает ваш сайт (или больше, чем пул приложений), не имеет разрешений на использование БД. Вы можете либо проверить в IIS, какой пользователь пул работает, и дать им разрешения, либо вместо этого изменить строку SQL-соединения, чтобы не использовать доверенную аутентификацию и предоставить учетные данные пользователя, у которого есть разрешение в строке соединения.

Изменить: Если вы щелкните правой кнопкой мыши на разделе Identity в пуле и перейдите к свойствам, в нем появится поле, в котором вы можете выбрать один из 3 встроенных системных учетных записей или указать свою собственную учетную запись. Либо предоставите одно из встроенных учетных записей для БД, либо используйте учетную запись, у которой есть разрешение. Или оставьте его как есть и измените строку соединения.

Ответ 6

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

Ответ 7

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

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

Если вы используете проверку подлинности Windows, учетная запись WindowsIdentity должна иметь логин на вашем SQL Server. В разделе Безопасность → Логины → Вход в систему "Новый" вы хотите добавить любое имя, которое было отображено в WindowsIdentity, и убедитесь, что выбрана проверка подлинности Windows.

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

Ответ 8

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

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

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

Ответ 9

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

создать пользователя sql и использовать SQL Auth.: D

Ответ 10

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

Так что не делайте легкую, менее безопасную вещь (NETWORK SERVICE). Делать правильные вещи. Прокрутите вверх.;)

Ответ 11

Использование надежного подключения в режиме проверки подлинности Windows: ОС: Windows 7 32 бит IIS 7, Sql Server 2008 R2 Express Строка подключения: cn.open "Provider = SQLOLEDB.1; Integrated Security = SSPI; Persist Security Info = False; Initial Catalog = test; Источник данных = mycomputername\sqlexpress;" (если имя экземпляра - sqlexpress или другое имя экземпляра, которое вы использовали)

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

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

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

Ответ 12

Если вы посмотрите в описании поля, в нем указано, что для учетной записи в качестве учетной записи используется учетная запись "Сетевые службы". Не уверен, почему в Win7 по умолчанию используется параметр ApplicationPoolIdentity.

Ответ 13

У меня такая же проблема. Я запускаю Windows 7 RC. Когда я пытаюсь использовать файл .mdf(находящийся в App_Data), теперь есть способ заставить эту работу работать. Я попытался изменить идентификатор AppPool для LocalSystem, но он просто не будет работать.

Если я использую "стандартную" базу данных, тогда она будет работать, если я использую LocalSystem, но она не будет работать со знаменитым "IIS APPPOOL\DefaultAppPool".

Я немного обеспокоен тем, что не нашел никакой информации по этому вопросу, кажется, что пользователь IIS APPPOOL\DefaultAppPool абсолютно бесполезен, если вы используете базу данных любого типа...

У меня это работает, но я также разочарован, чтобы не понимать модель безопасности, как указано ryexley.

Ответ 14

У меня возникла такая же проблема между (SQL2008, которая установлена ​​на автономном сервере Win-server2003) и (IIS6 с ASP.NET3.5, которые установлены на автономном сервере Win-server2003).

Где IIS пытается получить доступ к SQL2008 с использованием некоторого пользователя в домене "домен\имя пользователя".

Я удалил следующую опцию из строки подключения, и теперь все прекрасно работает.

Integrated Security=True;

Ответ 15

да, метод идентификации пула приложений не работает, как они говорят (не в IIS7, так или иначе). Я думаю, что в MS есть хакеры, которые делают эту безопасность непреднамеренной, поэтому вы выбираете путь наименьшего сопротивления и оставляете свою систему менее защищенной (поэтому они могут взломать ее позже). - просто шучу, но на самом деле, их модель безопасности - это чистое безумие, нет простых (шаг за шагом) инструкций в любом месте на MSDN - nada, zip!