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

329

У меня есть веб-проект (С# 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 как мой веб-проект. Изображение 441 При посещении сайта браузер не отображает страницу и позволяет браузеру загружать страницу.

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

  • 2
    Вы разрешили разрешение на идентификацию пула приложений в папке сайта?
  • 0
    я не уверен, не могли бы вы сказать мне, как это сделать?
Показать ещё 7 комментариев
Теги:
web-config
iis-7

25 ответов

427
Лучший ответ

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

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

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

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

Изображение 5927

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

  • 7
    спасибо, я сделал то, что тебе грустно, теперь я получаю эту ошибку: Не могу открыть базу данных "SiteNameExtension", запрошенную логином. Ошибка входа Ошибка входа для пользователя 'IIS APPPOOL \ DefaultAppPool'.
  • 69
    ОЧЕНЬ ВАЖНО: НЕ НАЖИМАЙТЕ ПОИСК, ЧТОБЫ ПОПРОБОВАТЬ, ЧТОБЫ ПОДТВЕРДИТЬ ЛОГИН! Это не признает, но это будет работать. Просто введите его как IIS APPPOOL \ SimonsAppPoolName. Посмотреть этот stackoverflow.com/questions/1933134
Показать ещё 9 комментариев
306

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

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

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

  • 51
    @ GibboK, если вы беспокоитесь о безопасности, не делайте этого. См. Technet.microsoft.com/en-us/library/dd378907(v=WS.10).aspx
  • 0
    если вы используете виртуальный каталог, обязательно сделайте это в виртуальном каталоге, а не в корне веб-сервера
Показать ещё 5 комментариев
15

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

Trusted_Connection=false;

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

  • 4
    хотите уточнить?
  • 7
    Если в строке подключения указано Trusted_Connection = true, значения аутентификации SQL будут переопределены профилем пользователя IIS Identity.
Показать ещё 2 комментария
8

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

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

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

 Integrated Security = true;

или

 Integrated Security = SSPI;

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

8

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

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

Изображение 5929

  • 0
    Является ли описанный выше процесс (и изображение), который вы описываете, предоставляя разрешения уровня сервера для этой идентификации пула приложений? Не похоже на хорошую идею.
  • 2
    Этот пользователь заслуживает медали! Ничего не помогло, кроме этого!
Показать ещё 1 комментарий
6

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

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

  • 0
    извините, не знаю, как это сделать, не могли бы вы указать мне учебник? спасибо за вашу помощь в этом
  • 2
    Не делайте этого, есть причина, по которой IIS изменил удостоверение пула приложений, learn.iis.net/page.aspx/624/application-pool-identities
Показать ещё 1 комментарий
5

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

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

4

Прежде всего вам нужно очистить, если вы используете проверку подлинности 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- > , затем введите ssms, затем нажмите ok в ssms, войдите в свою учетную запись Windows. открыть вкладку безопасности вкладки вкладки, а затем вы сможете просматривать свою учетную запись.

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

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

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

  • 0
    Отлично! LocalSystem исправил эту проблему для меня :)
4

Запустите этот 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
  • 0
    Спасибо, самый простой способ;) +1
3

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

  • 0
    Это решило это для нас, и мы не уверены, почему. IIS / AppPool просто перехватывает строку подключения, в которой явно указано «Integrated Security = true»? Зачем??
3

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

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

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

  • 1
    просто добавить ... в левой части, в разделе Разрешения ... отметьте db_writer и db_reader; и выберите базу данных, которая будет использовать эти разрешения.
2

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

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

2

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

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 проще, чем упомянутая выше ситуация в корпоративной сети.

2

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

1

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

Изображение 5930

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

Изображение 5931

Выберите идентификатор пула приложений Изображение 5932

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

0

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

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

Решение

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

ApplicationPoolIdentity -> NetworkService
0

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


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

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

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

0

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

  • 2
    В самом деле??? А какие разрешения ты собираешься предоставить "Всем"?
  • 0
    Мы устанавливаем разрешения в соответствии с нашими потребностями. Часть аутентификации обрабатывается, и мы проверяем авторизацию с помощью кода, чтобы разрешить доступ. Не стесняйтесь поправлять меня, если вы чувствуете какую-то двусмысленность. Благодарю.
0

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

0

Я столкнулся с той же проблемой, что и 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, тогда просто отмените все.:) Да, я знаю, но это сработало.

0

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

0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню