it-swarm.com.ru

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

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

Локально в IIS у меня есть мой Default Web Site с моим развертыванием. И моя команда deploy, и 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)

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

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

388
GibboK

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

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

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

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

enter image description here

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

530
Jeff Ogata

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

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

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

329
Thea

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

Trusted_Connection=false;

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

24
JGilmartin

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

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

db

16
DevT

Запустите этот сценарий 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
13
Rolwin C

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

User ID=xxx;Password=yyy

но в строке connection есть:

Trusted_Connection=true;

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

То же самое применимо, если в строке connection есть:

 Integrated Security = true;

или же

 Integrated Security = SSPI;

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

9
spiderman77

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

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

7
Christian

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

 enter image description here

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

 enter image description here

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

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

6
Lijo

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

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

6
user4203557

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

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

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

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

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

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

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

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

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

5
amar gadekar

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

Том

4
tommylux

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

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

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

4
The Coder

Как указано, Не использовать проверку подлинности 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"/>

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

3
Hammad Khan

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

2
charles

Если в вашем файле 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
Daming Fu

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
subsci

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


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

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

0
Ogglas

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

0
alexkovelsky

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

0
subramanya4

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

0
Atta Ur Rehman Zai

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

Разработка Web.Host в Visual Studio 2013 Express База данных, созданная в SQL Server 2012 Express Выполнение теста с использованием встроенного IIS Express (работает) Изменено для использования IIS Local (from страница свойств - веб-опция) Выполнен тест с 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, тогда просто отметьте все. :) Да, я знаю, но это сработало.

0
Brian Quinn

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

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

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

0
colmde

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

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

0
Simon_Weaver

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

0
badr slaoui

Важно включить sysadmin в роли сервера

0
edu

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

0
avinava basu

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

0
Erik Rodriguez

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

0
Luis

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

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

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

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

0
Zolfaghari

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

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

0
Irshu