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

У меня есть веб-проект (С# 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).

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

Ответ 1

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

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

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

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

enter image description here

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

Ответ 2

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

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

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

Ответ 3

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

Trusted_Connection=false;

в вашем соединении Строка

Ответ 4

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

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

db

Ответ 5

Запустите этот sql script

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

Ответ 6

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

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

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

 Integrated Security = true;

или

 Integrated Security = SSPI;

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

Ответ 7

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

enter image description here

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

enter image description here

Выберите идентификатор пула приложений enter image description here

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

Ответ 8

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

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

Ответ 9

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

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

Ответ 10

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

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

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

Ответ 11

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

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

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

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

Ниже приведены шаги для проверки подлинности Windows WCF:

1) Откройте IIS (windows + R (запустить), затем введите inetmgr, затем нажмите ОК)

2) дважды щелкните имя вашего ПК в разделе "Подключения"

3) Нажмите Пулы приложений

4) Выберите пул приложений (DefaultAppPool)

5) Затем в разделе "Действия" щелкните правой кнопкой мыши "Дополнительные параметры":

6) Перейдите в раздел "Модель процесса" и

7) нажмите на личность.

8) Теперь выберите LocalSystem.

Теперь откройте свою студию управления сервером sql: откройте run->, затем введите ssms → затем нажмите ок В ssms войдите, используя учетную запись Windows для аутентификации. Откройте вкладку "Безопасность", откройте вкладку "Логины", и вы сможете просматривать свою учетную запись.

Теперь откройте свойства вашего аккаунта перейдите в userMapping, затем выберите базу данных, которую вы хотите подключить затем проверьте службы членства в ролях, которые вы хотите использовать для выбранной базы данных. нажмите ОК.

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

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

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

Ответ 12

У меня было это сообщение, и я использую проверку подлинности 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 DB или просто для использования SQL Auth. Оба были бы правильными, если бы вы не захотели захватить или защитить отдельных пользователей Windows внутри SQL.

Tom

Ответ 13

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

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

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

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

Ответ 14

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

Ответ 15

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) и встроенного Web-сервера в производственную среду происходит из-за того, что SID разработчика и его ACL не должны использоваться в безопасном производстве Окружающая среда. Microsoft предоставляет инструменты для развертывания. Но жаль, что плохой разработчик, привыкший ко всему, что работает из коробки в новой простой VS IDE с локальным и локальным серверами, потому что эти инструменты будут трудно использовать для этого разработчика, особенно для такого разработчика, у которого нет поддержки SysAdmin и DBAdmin или их специализированные знания. Тем не менее развертывание в Azure проще, чем упомянутая выше ситуация в корпоративной сети.

Ответ 16

Если у вас есть строка подключения, добавленная в ваш 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>

Ответ 17

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


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

Ответ 18

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

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

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

Ответ 19

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

Ответ 20

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

Ответ 21

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

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

Ответ 22

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

Ответ 23

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

Разработал Web.Host в Visual Studio 2013 Express База данных, созданная в SQL Server 2012 Express Выполненный тест с использованием встроенного IIS Express (рабочий) Изменено для использования IIS Local (со страницы свойств - веб-опция) Пробный тест с Fiddler Полученная ошибка - не удалось открыть базу данных для провайдера....  ссылаясь на "APPPOOL\DefaultAppPool"

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

В IIS

Нажмите на пул приложений 'DefaultAppPool' Set Identify = 'ApplicationPoolIdentity' Установите .NET framework = v4.0 (хотя мое приложение было 4.5)

В SQL Server Management Studio

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

Ответ 24

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

Ответ 25

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

Ответ 26

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

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

Ответ 27

Я сделал точно, как @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 все сработало.

Ответ 28

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

Ответ 29

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

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

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

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

Ответ 30

Вы можете столкнуться с этим неправильно в конкретной базе данных, которая создается после обновления SSMS. Откройте SSMS и выберите базы данных, откройте нужную базу данных, затем нажмите Security--> Users-->, щелкните правой кнопкой мыши "Пользователи", снова щелкните "Новый пользователь", добавьте "NT AUTHORITY\Authenticated Users", сохраните свою работу и перейдите к Ваша форма в Интернете/на рабочем столе, что бы вы ни делали. Наслаждаться....