c# - сервере - iis publish asp net web application




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

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

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

Локально в IIS у меня есть мой Default Web Site с моим развертыванием. Как мое развертывание, так и Default Web Site по Default Web Site находятся в пуле ASP.NET v4.0 (посмотрите изображение для настроек) пул Target Framework 4 как мой веб-проект. При посещении сайта браузер не отображает страницу и позволяет браузеру загружать страницу.

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


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


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

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

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


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


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

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


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


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

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

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


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

User ID=xxx;Password=yyy

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

Trusted_Connection=true;

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

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

 Integrated Security = true;

или же

 Integrated Security = SSPI;

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


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

Запустите этот 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

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

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


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

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

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

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


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

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

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


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

Том


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


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

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


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


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

Решение

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

ApplicationPoolIdentity -> NetworkService

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

Trusted_Connection=false;

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


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

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

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

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