Ошибка входа для пользователя «IIS APPPOOL \ ASP.NET v4.0»

У меня есть веб-проект (C # Asp.Net, EF 4, MS SQL 2008 и IIS 7), и мне нужно перенести его в IIS 7 локально (на данный момент отлично работает с CASSINI).

Локально в IIS у меня есть мой Default Web Site с моим развертыванием. Как мое развертывание, так и Default Web Site по Default Web Site находятся в пуле ASP.NET v4.0 (посмотрите изображение для настроек) пул Target Framework 4 как мой веб-проект. Настройки пула При посещении сайта браузер не отображает страницу и позволяет браузеру загружать страницу.

У меня есть другие проекты, работающие на IIS на местном уровне, и они работают без проблем (но они не используют Entity Framework).

Используя Event Logger, я вижу ошибки, как показано ниже:

 Exception information: Exception type: EntityException Exception message: The underlying provider failed on Open. at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) Login failed for user 'IIS APPPOOL\ASP.NET v4.0'. at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) at System.Data.SqlClient.SqlConnection.Open() at System.Data.EntityClient.EntityConnection.OpenStoreConnectionIf(Boolean openCondition, DbConnection storeConnectionToOpen, DbConnection originalConnection, String exceptionCode, String attemptedOperation, Boolean& closeStoreConnectionOnFailure) 

Связанный вопрос

UPDATE: вы можете прочитать в ресурсах по этому вопросу, что разрешения должны быть предоставлены на MS SQL 2008 вручную, как объясняет его ответ. Использование IIS 7.5 и MS SQL 2008 R2, установка вручную разрешения не требуется.

Похоже, что не удается открыть соединение с SQL Server.

Вам нужно добавить логин в SQL Server для IIS APPPOOL\ASP.NET v4.0 и предоставить разрешения для базы данных.

В SSMS под сервером разверните Security, затем щелкните правой кнопкой мыши Logins и выберите «New Login …».

В диалоговом окне «Новый вход» введите пул приложений в качестве имени входа и нажмите «ОК».

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

Затем вы можете щелкнуть правой кнопкой мыши логин для пула приложений, выберите «Свойства» и выберите «Отображение пользователей». Проверьте соответствующую базу данных и соответствующие роли. Я думаю, вы могли бы просто выбрать db_datareader и db_datawriter , но я думаю, вам все равно нужно предоставить разрешения для выполнения хранимых процедур, если вы сделаете это через EF. Вы можете проверить детали для ролей здесь .

Вы можете изменить ApplicationPoolIdentity из IIS7 -> Пулы приложений -> Дополнительные настройки. Расширенные настройки

В разделе ApplicationPoolIdentity вы найдете локальную систему. Это запустит ваше приложение под NT AUTHORITY\SYSTEM , которое по умолчанию является существующим логином для базы данных.

Изменить: перед применением этого предложения вы должны учитывать и понимать последствия для безопасности.

убедитесь, что у вас есть …

 Trusted_Connection=false; 

в вашей связи String

Я решил эту проблему, используя sql как следующее изображение.

Щелкните правой кнопкой мыши на db-> properties -> permission -> View Server permission ->, а затем выберите IIS APPPOOL\ASP.NET v4.0 и предоставите разрешение.

децибел

Если в строке соединения вы указали:

 User ID=xxx;Password=yyy 

но в строке подключения есть:

 Trusted_Connection=true; 

SQL Server будет использовать проверку подлинности Windows, поэтому ваши значения подключения будут игнорироваться и переопределяться (IIS будет использовать учетную запись Windows, указанную в профиле пользователя Identity). больше информации здесь

То же самое происходит, если в строке подключения есть:

  Integrated Security = true; 

или

  Integrated Security = SSPI; 

потому что Windows Authentication будет использоваться для подключения к серверу базы данных. больше информации здесь

Я ненавижу ApplicationPoolIdentity. Я всегда устанавливаю учетную запись пользователя Windows в качестве учетной записи в AppPools.

Как говорит дрейф, это звучит как проблема безопасности базы данных. Поэтому создайте учетную запись пользователя NT, назначьте ее ASP.NET v4.0 AppPool, а затем предоставите ей разрешение на папку веб-сайта и соответствующую таблицу (таблицы) в SQL.

Запустите этот sql-скрипт

 IF NOT EXISTS (SELECT name FROM sys.server_principals WHERE name = 'IIS APPPOOL\DefaultAppPool') BEGIN CREATE LOGIN [IIS APPPOOL\DefaultAppPool] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english] END GO CREATE USER [WebDatabaseUser] FOR LOGIN [IIS APPPOOL\DefaultAppPool] GO EXEC sp_addrolemember 'db_owner', 'WebDatabaseUser' GO 

Не используйте Integrated Security. Использовать User Id=yourUser; pwd=yourPwd; User Id=yourUser; pwd=yourPwd;

Это решает проблему.

Первое, что вам нужно очистить, если вы используете проверку подлинности Windows, и вы не укажете ни одного имени пользователя в строке подключения, тогда:

Что происходит, когда вы запускаете свой код через localhost: при запуске вашего тестового клиента wcf из localhost он сможет связываться с базой данных, поскольку приложение локального режима отладки вызывается базой данных по сервису вашей учетной записи. Таким образом, он имеет доступ к базе данных, потому что devenv.exe работает под учетной записью пользователя.

Но когда вы развертываете свой веб-сервис в IIS. Теперь понимайте, что эта служба работает под IIS не под вашей учетной записью. Поэтому вам необходимо назначить права доступа службе IIS для доступа к серверу sql для проверки подлинности Windows. Здесь ваш веб-сервис не сможет связаться с SQL-сервером из-за проблемы с правами доступа и Login Failed для пользователя_______ (сюда придет ваш пользователь)

Поэтому, если вы используете аутентификацию Windows для подключения своей базы данных, вам просто нужно изменить настройки пула приложений IIS. Вам необходимо изменить идентификатор пула приложений IIS в локальной системе.

Ниже приведены шаги для проверки Windows WCF: • Откройте IIS (Windows + R (запустить), затем введите inetmgr, затем нажмите «ОК») • дважды щелкните имя своего ПК в разделе «Подключения» • Нажмите «Пулы приложений». • Выберите свой пул приложений (DefaultAppPool). Затем действия правой кнопкой мыши Дополнительные настройки: • Перейдите в раздел «Модель процесса» и нажмите «Идентификация». • Теперь выберите LocalSystem.

Теперь откройте студию управления сервером sql: откройте run-> then type ssms, затем нажмите ok в ssms, войдите с помощью своей учетной записи проверки подлинности Windows. откройте вкладку безопасности вкладки вкладки, а затем вы сможете просматривать свою учетную запись.

Теперь откройте свойства вашей учетной записи, перейдите в userMapping, затем выберите базу данных, которую вы хотите подключить, затем проверьте службы роли, которые вы хотите использовать для выбранной базы данных, нажмите «ОК». (Для сетевых служб, то есть пользователей интрасети, вам необходимо настроить вышеуказанные настройки для пользователя NT AUTHORITY \ SYSTEM)

add Trusted_Connection = True; свойство в вашей строке соединения. Сохраните его и разверните веб-службу. Перезапустите приложение.

вы сможете подключить базу данных.

перейдите в iis -> пулы приложений -> найдите пул приложений, используемый в приложении

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

выберите пул приложений, используемый для приложения, щелкните правой кнопкой мыши, выберите дополнительные параметры

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

Выберите идентификатор пула приложений введите описание изображения здесь

выберите встроенную локальную систему и нажмите «ОК».

У меня была эта проблема, и это было вызвано чем-то другим – у меня был пользователь IIS APPPOOL \ ASP.NET v4.0 в моей базе данных, но он все еще не работал.

Недавно я обновил мою установку SQL Server, и в процессе пользователь отключился от входа в систему – таким образом, в базе данных -> Безопасность -> Пользователи были «IIS APPPOOL \ ASP.NET v4.0», но ни один пользователь не находится под защитой -> Логины.

Добавлен вход «IIS APPPOOL \ ASP.NET v4.0» в Security -> Logins, SQL Server автоматически сопоставил его с пользователем в базе данных (это раньше нужно было делать вручную) и исправлена ​​проблема.

У меня было это сообщение, и я использую проверку подлинности Windows на веб-сервере.

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

Я нашел, введя следующее в web.config, исправил это для меня:

    

https://msdn.microsoft.com/en-us/library/bsz5788z.aspx

Я вижу другие ответы, касающиеся создания имени пользователя AppPool в SQL DB или просто для использования SQL Auth. Оба были бы правильными, если бы вы не хотели захватывать или защищать отдельных пользователей Windows внутри SQL.

Том

Установка идентификатора делает эту работу только на моих страницах.

Cassini запускает ваш веб-сайт как свою собственную идентификацию пользователя при запуске приложения Visual Studio. IIS запускает ваш сайт как идентификатор пула приложений. Если идентификатор пула приложений не получает доступ к базе данных, вы получаете ошибки.

IIS представила идентификатор App Pool Identity для повышения безопасности. Вы можете запускать веб-сайты под идентификатором пула приложений по умолчанию или создать новый пул приложений со своим собственным именем или создать новый пул приложений со своим собственным именем, которое выполняется под учетной записью пользователя (обычно это учетная запись домена).

В сетевых ситуациях (которые не находятся в Azure) вы можете запустить новый пул приложений под учетной записью пользователя домена Active Directory; Я предпочитаю это по счету машины. Это обеспечивает грамотную защиту и расширенный доступ к сетевым ресурсам, включая базы данных. Каждый веб-сайт работает в другом пуле приложений (и каждый из них работает под собственной учетной записью пользователя домена).

Продолжайте использовать Windows Integrated Security во всех строках подключения. В SQL Server добавьте пользователей домена в качестве логинов и предоставите разрешения для баз данных, таблиц, SP и т. Д. Для каждого веб-сайта. Например, DB1, используемый сайтом 1, имеет логин для User1, потому что Website1 работает в пуле приложений как User1.

Одна из проблем при развертывании из встроенной БД Visual Studio (например, LocalDB) и встроенного веб-сервера в производственную среду происходит из-за того, что SID пользователя и его ACL не должны использоваться в безопасной производственной среде. Microsoft предоставляет инструменты для развертывания. Но жаль, что плохой разработчик, привыкший ко всему, что работает из коробки в новой простой VS IDE с локальным и локальным серверами, потому что эти инструменты будут трудно использовать для этого разработчика, особенно для такого разработчика, у которого нет поддержки SysAdmin и DBAdmin или их специализированные знания. Тем не менее развертывание в Azure проще, чем упомянутая выше ситуация в корпоративной сети.

Если у вас есть строка подключения, добавленная в ваш web.config, убедитесь, что «Integrated Security = false;» поэтому он будет использовать идентификатор и пароль, указанные в файле web.config.

    

Как указано, не используйте проверку подлинности Windows, используйте проверку подлинности SQL Server

Также, если вы создали соединение, используя диалоговое окно «Подключение к серверу», обязательно проверьте соединения в web.config. Вероятно, вы создали / модифицировали соединение и были сохранены как доверенное соединение в web.config. Просто используйте эту аутентификацию

  

который должен исправить ошибку.

Другой способ предоставления разрешения для базы данных для пользователя IIS APPPOOL\ASP.NET v4.0 выглядит следующим образом.
введите описание изображения здесь

  1. Добавьте нового пользователя с именем пользователя и именем пользователя в качестве IIS APPPOOL\ASP.NET v4.0 с вашей схемой по умолчанию.
  2. Перейти к схеме владельца и членству, проверить db_datareader, db_datawriter

Вы сделали то, что рекомендовал @Teddy и вы STILL получили ту же ошибку?

Убедитесь, что вы изменили настройки пула приложений, соответствующие вашему виртуальному каталогу, а не родительскому серверу. Каждый виртуальный каталог имеет свой собственный AppPool и не наследует.

В DefaultAppPool установите NetworkService в свойстве Identity и в Sql Server добавьте службу сети пользователя и дайте ему соответствующие разрешения для вашей базы данных, это очень хорошо работает для меня, я тестировал локально, но я думаю, что это лучшая конфигурация для подключения от любого другой компьютер в сети. когда вы устанавливаете LocalSystem в Identity в IIS, это хорошо работает, и нет необходимости создавать другого пользователя на Sql Server, но я думаю, что это не будет работать в сетевой среде.

Я столкнулся с той же проблемой, что и ASP.NET Web API

Разработал Web.Host в Visual Studio 2013 Express Database, созданную в SQL Server 2012 Express Executed test, используя встроенный IIS Express (работает) Изменен для использования IIS Local (со страницы свойств – веб-вариант) Ran test с Fiddler Полученная ошибка – не удается открыть базу данных для провайдера …. цитируя ‘APPPOOL \ DefaultAppPool’

Решение, которое сработало.

В IIS

Нажмите на пул приложений «DefaultAppPool» Set Identify = ‘ApplicationPoolIdentity’ Установите .NET framework = v4.0 (хотя мое приложение было 4,5)

В SQL Server Management Studio

Щелкните правой кнопкой мыши папку «Безопасность» (в соответствии с движком SQL Server, применительно ко всем таблицам). Щелкните правой кнопкой мыши на пользователе и добавьте «IIS APPPOOL \ DefaultAppPool». В разделе «Предоставление» в разделе «Грант» проверьте параметры, которые вы хотите предоставить. Что касается вышеизложенного, если вы являетесь администратором баз данных, вы, вероятно, знаете и хотите контролировать, что это за варианты. Если вы похожи на меня, разработчик просто хотел протестировать вашу службу WEB API, которая также имеет доступ к SQL Server через EF 6 в стиле MVC, а затем просто отметьте все. 🙂 Да, я знаю, но это сработало.

Если вы добавите новый логин, убедитесь, что в свойствах сервера (rightclick -> properties) / security режим аутентификации установлен как для sqlserver, так и для окон не только для окон.

Добавьте «Все» под защитой. Если вы добавили сервер и пользователи, входящие в базу данных, то это то, что вам не хватает. Надеюсь это поможет.

Для записи, если вы столкнулись с этой ошибкой после переключения с LocalDB на SQLEXPRESS , убедитесь, что firebase database уже существует в SQLEXPRESS . Это можно проверить в Management Studio.

У меня была такая же проблема при использовании Entity Framework после переключения на SQLEXPRESS from LocalDB . Мне пришлось запустить команду « Update-Database . После этого я смог успешно подключиться.

Я столкнулся с подобной проблемой во время размещения приложения в IIS

Решение

Я меняю идентификатор пула и его работу

 ApplicationPoolIdentity -> NetworkService 

Я сделал точно так же, как @JeffOgata сказал, но я получил ошибку:

 Windows NT user or group 'IIS APPPOOL\ASP.NET v4.0' not found. Check the name again. (Microsoft SQL Server, Error: 15401) 

Я снова посмотрел на свое сообщение об ошибке, и он сказал, что Login failed for user 'IIS APPPOOL\DefaultAppPool'.

После добавления пользователя с именем IIS APPPOOL\DefaultAppPool все сработало.

Думал, что я опубликую это как ответ, поскольку он имеет отношение к вопросу и может ответить на него в некоторых случаях.

Это же сообщение появляется также, если firebase database не существует!

Убедитесь, что в строке соединения нет орфографических ошибок, указывается на правильный экземпляр сервера и т. Д.

Я использовал SQL Server Profiler (ansible в меню SSMS => Tools) и увидел там (когда IIS попытался подключиться к базе данных), что мой пользователь IIS по какой-то причине был NT AUTHORITY \ IUSR, независимо от всех шагов, рекомендованных в ответах в этом вопросе , Поэтому я добавил этого пользователя на SQL Server, и он сработал …

В веб-форме Asp.net,

эта ошибка исправлена ​​при установке asp.net из:

Диспетчер серверов> Управление> Добавить роль и функции> Роли сервера> Веб-сервер (IIS)> Веб-сервер> Разработка приложений> Установлен ASP.NET 3.5 / 4.6.

моя проблема исправлена.

  • Ограничить доступ к определенному controllerу по IP-адресу в бета-версии ASP.NET MVC
  • Настройка нескольких параметров SMTP в web.config?
  • Как настроить кеш статического содержимого для каждой папки и расширения в IIS7?
  • Разрешить анонимную проверку подлинности для одной папки в web.config?
  • Что делает файл Web.Config в папке представлений проекта MVC
  • Установка страницы по умолчанию в Asp.net
  • Тайм-аут аутентификации форм против тайм-аута sessionState
  • Как сохранить словарь в моем файле web.config?
  • Ошибка аутентификации при отладке VS2013 - iis express
  • Цитата Escape в строке подключения web.config
  • Как вы изменяете настройки приложения web.config во время выполнения?
  • Interesting Posts
    Давайте будем гением компьютера.