Ошибка входа для пользователя '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 ]

552 голосов
/ 08 октября 2011

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

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

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

В диалоговом окне New Login введите пул приложений в качестве имени для входа и нажмите «OK».

enter image description here

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

330 голосов
/ 13 января 2012

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

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

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

28 голосов
/ 16 апреля 2012

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

Trusted_Connection=false;

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

21 голосов
/ 24 декабря 2013

Я решил эту проблему, используя sql, как показано ниже1005 *db

17 голосов
/ 06 ноября 2015

Запустите этот скрипт 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
9 голосов
/ 11 марта 2015

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

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

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

 Integrated Security = true;

или

 Integrated Security = SSPI;

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

8 голосов
/ 21 октября 2017

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

enter image description here

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

enter image description here

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

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

7 голосов
/ 08 октября 2011

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

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

6 голосов
/ 31 октября 2014

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

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

5 голосов
/ 10 декабря 2015

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

Что происходит, когда вы запускаете свой код через localhost: когда вы запускаете wcfПротестируйте клиент с локального хоста, он сможет обмениваться данными с базой данных, поскольку приложение в режиме локальной отладки вызывает базу данных службой вашей учетной записи.Таким образом, он имеет доступ к базе данных, поскольку 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, затем выберите базу данных, к которой вы хотите подключиться, и проверьте службы членства в ролях, для которых вы хотите использоватьвыбранную базу данных нажмите ок.(Для сетевых служб, т. Е. Для пользователей в интрасети, вам также необходимо настроить вышеуказанные параметры для пользователя NT AUTHORITY \ SYSTEM)

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

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

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