Ошибка входа пользователя 'APPPOOLASP.NET службы IIS В4.0'

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

локально в IIS у меня есть мой Default Web Site С моей развертывания. Оба мои развертывания и Default Web Site находятся в пуле ASP.NET v4.0 (найдите изображение для параметров) целевая платформа пула 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 APPPOOLASP.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)

вопрос

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

29 ответов


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

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

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

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

enter image description here

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


вы можете изменить ApplicationPoolIdentity из IIS7 - > пулы приложений - > Дополнительные параметры. AdvancedSettings

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

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


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

Trusted_Connection=false;

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


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

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

db


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

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

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

 Integrated Security = true;

или

 Integrated Security = SSPI;

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


выполнить этот 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

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

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


Не используйте интегрированную безопасность. Использовать User Id=yourUser; pwd=yourPwd;

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


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

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

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

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

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

теперь откройте SQL server management studio: откройте run - > затем введите ssms, затем нажмите ok в ssms, войдите в систему с помощью учетной записи проверки подлинности windows. откройте вкладку Безопасность разверните вкладку логины, после чего вы сможете просмотреть свою учетную запись.

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

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

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


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

enter image description here

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

enter image description here

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

выберите встроенный как локальная система и нажмите ok


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

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

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


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

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

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

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

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

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

Тома


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

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

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

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


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


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

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

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

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

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


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

<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>

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


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

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

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


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


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

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

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

в IIS

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

в среде SQL Server Management Studio

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


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


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


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

у меня была такая же проблема при использовании Entity Framework после переключения на SQLEXPRESS from LocalDB. Мне пришлось бежать


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

решение

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

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 все работало.


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

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

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


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


In Asp.net webform,

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

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

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


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