Ошибка входа для пользователя 'IIS APPPOOL \ ASP.NET v4.0' - PullRequest
400 голосов
/ 08 октября 2011

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

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

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

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

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 установка разрешения вручную не требуется.

Ответы [ 32 ]

4 голосов
/ 19 апреля 2017

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

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

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

<system.web>
  <identity impersonate="true" />
</system.web>

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

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

Tom

4 голосов
/ 29 марта 2012

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

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

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

3 голосов
/ 01 августа 2016

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

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

<add name="MyDBConnectionString" connectionString="Data Source=localhost;Initial Catalog=Finantial;User ID=xxx;Password=xxx" providerName="System.Data.SqlClient"/>

, которая должна исправить ошибку.

2 голосов
/ 28 июля 2015

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

<connectionStrings>
    <add providerName="System.Data.SqlClient" name="MyDbContext" connectionString="Data Source=localhost,1433;Initial Catalog=MyDatabase;user id=MyUserName;Password=MyPassword;Trusted_Connection=true;Integrated Security=false;" />
</connectionStrings>
2 голосов
/ 16 сентября 2013

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

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

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

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

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

2 голосов
/ 30 мая 2012

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

1 голос
/ 17 мая 2019

со мной произошло нечто похожее, и у меня сработало изменение свойства Integrated Security = True на Integrated Security = false в web.config веб-сайта

1 голос
/ 13 мая 2017

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


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

У меня та же проблема, которую я решил, изменив Integrated Security=True на false сейчас работает

1 голос
/ 18 декабря 2017

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

Это же сообщение появляется также , если база данных не существует!

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

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