У меня есть веб-проект (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 в качестве моего веб-проекта.
При посещении сайта браузер не показывает страницу и позволяет браузеру загружать страницу.
У меня есть другие проекты, работающие на 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 установка разрешения вручную не требуется.
источник
Ответы:
Похоже, не удается открыть соединение с SQL Server.
Вам необходимо добавить имя входа в SQL Server для
IIS APPPOOL\ASP.NET v4.0
и предоставить разрешения для базы данных.В SSMS под сервером разверните Security, затем щелкните правой кнопкой мыши Logins и выберите «New Login ...».
В диалоговом окне «Новый вход в систему» введите пул приложений в качестве имени для входа и нажмите «ОК».
Затем вы можете щелкнуть правой кнопкой мыши логин для пула приложений, выбрать «Свойства» и выбрать «Сопоставление пользователей». Проверьте соответствующую базу данных и соответствующие роли. Я думаю, что вы можете просто выбрать
db_datareader
иdb_datawriter
, но я думаю, что вам все равно нужно предоставить разрешения для выполнения хранимых процедур, если вы делаете это через EF. Вы можете проверить детали для ролей здесь .источник
Вы можете изменить ApplicationPoolIdentity из IIS7 -> Пулы приложений -> Расширенные настройки.
Под ApplicationPoolIdentity вы найдете локальную систему. Это позволит запустить ваше приложение
NT AUTHORITY\SYSTEM
, которое по умолчанию является существующим логином для базы данных.Изменить: Перед применением этого предложения вы должны отметить и понять последствия для безопасности.
источник
убедитесь, что у вас есть ...
в вашей связи String
источник
Я решил эту проблему, используя sql следующим образом.
Щелкните правой кнопкой мыши db-> properties -> разрешение -> Просмотреть разрешение сервера ->, а затем выберите
IIS APPPOOL\ASP.NET v4.0
и предоставьте разрешение.источник
Запустите этот сценарий SQL
источник
Если в строке подключения вы указали:
но в строке подключения есть:
SQL Server будет использовать проверку подлинности Windows, поэтому значения вашего подключения будут игнорироваться и переопределяться (IIS будет использовать учетную запись Windows, указанную в профиле пользователя Identity). больше информации здесь
То же самое относится, если в строке подключения есть:
или
потому что проверка подлинности Windows будет использоваться для подключения к серверу базы данных. больше информации здесь
источник
Зайдите в iis -> пулы приложений -> найдите пул приложений, используемый в приложении
выберите пул приложений, используемый для приложения, щелкните правой кнопкой мыши, выберите дополнительные параметры
Выберите удостоверение пула приложений
выберите встроенную локальную систему и нажмите кнопку ОК
источник
Я ненавижу ApplicationPoolIdentity. Я всегда устанавливаю учетную запись пользователя Windows в качестве учетной записи на AppPools.
Как говорит дрейф, это звучит как проблема безопасности базы данных. Поэтому создайте учетную запись пользователя NT, назначьте ее для ASP.NET v4.0 AppPool, а затем предоставьте ей разрешение на папку веб-сайта и соответствующие таблицы в SQL.
источник
Не используйте встроенную безопасность. использование
User Id=yourUser; pwd=yourPwd;
Это решает проблему.
источник
У меня была эта проблема, и она была вызвана чем-то другим - в моей базе данных был пользователь «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 и не упоминаете пароль пользователя в строке подключения, тогда:
Что происходит, когда вы запускаете код через localhost: когда вы запускаете тестовый клиент wcf с localhost, он сможет обмениваться данными с базой данных, так как приложение в режиме локальной отладки вызывает базу данных службой вашей учетной записи. Так что он имеет доступ к базе данных, потому что devenv.exe работает под вашей учетной записью.
Но когда вы развертываете свой веб-сервис в IIS. Теперь поймите, этот сервис работает под IIS, а не под вашей учетной записью. Поэтому вам необходимо назначить права доступа к службе IIS для доступа к серверу sql для проверки подлинности Windows. Здесь ваш веб-сервис не сможет обмениваться данными с сервером SQL из-за проблем с правами доступа и с ошибкой входа для пользователя _______ (сюда придет ваш пользователь)
Поэтому, если вы используете проверку подлинности Windows для подключения к своей базе данных, вам просто нужно изменить настройки пула приложений IIS. Необходимо изменить удостоверение пула приложений IIS на локальную систему.
Ниже приведены шаги для проверки подлинности Windows WCF:
1) Откройте IIS (Windows + R (запустить), затем введите inetmgr, затем нажмите ОК)
2) дважды щелкните имя вашего ПК в разделе «Подключения»
3) Нажмите Пулы приложений.
4) Выберите пул приложений (DefaultAppPool)
5) Затем в разделе «Действия» справа щелкните «Дополнительные параметры»:
6) Перейдите в раздел Модель процесса и
7) нажмите на личность.
8) Теперь выберите LocalSystem.
Теперь откройте свою студию управления сервером sql: откройте run->, затем введите ssms ->, затем нажмите ok. В ssms войдите, используя свою учетную запись для аутентификации Windows. Откройте вкладку «Безопасность», откройте вкладку «Вход», после чего вы сможете просмотреть свою учетную запись.
Теперь откройте свойства своей учетной записи, перейдите в userMapping, затем выберите базу данных, к которой вы хотите подключиться, и проверьте службы членства в ролях, которые вы хотите использовать для выбранной базы данных. нажмите ок.
(Для сетевых служб, т. Е. Для пользователей в интрасети, вам также необходимо настроить вышеуказанные параметры для пользователя NT AUTHORITY \ SYSTEM)
add Trusted_Connection = True; свойство в строке подключения. Сохраните его и разверните веб-сервис. Перезапустите пул приложений.
Теперь вы сможете подключиться к базе данных.
источник
У меня было это сообщение, и я использую проверку подлинности Windows на веб-сервере.
Я хотел, чтобы аутентифицированный в настоящее время веб-пользователь проходил аутентификацию в базе данных, а не с использованием пользователя IIS APPPOOL \ ASP.NET v4, указанного в пуле приложений.
Я нашел, введя следующее в web.config, исправил это для меня:
https://msdn.microsoft.com/en-us/library/bsz5788z.aspx
Я вижу другие ответы, касающиеся создания имени пользователя AppPool в базе данных SQL или просто использования аутентификации SQL. И то, и другое будет правильным, если вы не хотите захватывать или защищать отдельных пользователей Windows внутри SQL.
Том
источник
1_in SqlServer Security => Логин => NT AUTHORITY \ SYSTEM => RightClick => Property => UserMaping => Выбрать YourDatabse => Общий && Выбор владельца => OK 2_В IIs Пулы приложений DefaultAppPool => Дополнительные настройки => Identity => LocalSystem => Ok
источник
Установка идентичности только делает эту работу на моих страницах.
источник
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 проще, чем описанная выше ситуация в корпоративной сети.
источник
Если в вашем файле web.config добавлена строка подключения, убедитесь, что «Integrated Security = false;» поэтому он будет использовать идентификатор и пароль, указанные в файле web.config.
источник
Как указано, не используйте проверку подлинности Windows, используйте проверку подлинности SQL Server
Также, если вы создали соединение с помощью диалога «Соединение с сервером», обязательно проверьте соединения в web.config. Вероятно, вы создали / изменили соединение, и оно было сохранено как доверенное соединение в web.config. Просто используйте эту аутентификацию
который должен исправить ошибку.
источник
Другой способ предоставления пользователю доступа к базе данных
IIS APPPOOL\ASP.NET v4.0
заключается в следующем.IIS APPPOOL\ASP.NET v4.0
вашей схеме по умолчанию.источник
Думал, что я опубликую это как ответ, так как он имеет отношение к вопросу и может ответить на него в некоторых случаях.
Это же сообщение появляется и в том случае, если база данных не существует!
Убедитесь, что строка подключения не содержит орфографических ошибок, указывает на правильный экземпляр сервера и т. Д.
источник
У меня та же проблема, я решил ее, изменив
Integrated Security=True
на ложное, теперь оно работаетисточник
что-то похожее случилось со мной, и мне удалось изменить свойство Integrated Security = True на Integrated Security = false в web.config веб-сайта.
источник
Вы сделали то , что
@Teddy
рекомендуется , и вы STILL получить ту же ошибку?Убедитесь, что вы меняете настройки для пула приложений, который соответствует вашему виртуальному каталогу, а не родительскому серверу. Каждый виртуальный каталог имеет свой собственный AppPool и не наследуется.
источник
В DefaultAppPool установите NetworkService в свойстве Identity, а в Sql Server добавьте User Network Service и предоставьте ему соответствующие разрешения для вашей базы данных, это очень хорошо работает для меня, я тестировал локально, но я думаю, что это лучшая конфигурация для подключения из любого другой компьютер в сети. когда вы устанавливаете LocalSystem в Identity в IIS, это работает хорошо, и нет необходимости создавать какого-либо другого пользователя в Sql Server, но я думаю, что это не будет работать в сетевой среде.
источник
Я столкнулся с той же проблемой тестирования ASP.NET Web API
Разработка Web.Host в Visual Studio 2013 Express База данных, созданная в SQL Server 2012 Express Выполнение теста с использованием встроенного IIS Express (работает) Изменено для использования IIS Local (со страницы свойств - веб-опция) Выполнено тестирование с ошибкой Fiddler Received - невозможно открыть базу данных для провайдера .... со ссылкой 'APPPOOL \ DefaultAppPool'
Решение, которое сработало.
В IIS
Нажмите на пул приложений «DefaultAppPool». Set Identify = «ApplicationPoolIdentity». Установите .NET framework = v4.0 (хотя мое приложение было 4.5)
В SQL Server Management Studio
Щелкните правой кнопкой мыши на папке «Безопасность» (в ядре SQL Server, что относится ко всем таблицам). Щелкните правой кнопкой мыши на «Пользователь» и добавьте «IIS APPPOOL \ DefaultAppPool». В столбцах «Доступные» в столбце «Предоставить» отметьте параметры, которые вы хотите предоставить. Что касается вышесказанного, если вы являетесь администратором базы данных, вы, вероятно, знаете и хотите контролировать, что это за опции. Если вы похожи на меня, разработчик просто хотел протестировать ваш сервис веб-API, который также обеспечивает доступ к SQL Server через EF 6 в стиле MVC, тогда просто отметьте все. :) Да, я знаю, но это сработало.
источник
Если вы добавляете новый логин, убедитесь, что в свойствах сервера (rightclick -> properties) / security режим аутентификации установлен как для sqlserver, так и для окон, а не только для окон.
источник
Добавить «Все» под защитой. Если вы добавили Сервер и пользователи вошли в базу данных, то вам этого не хватает. Надеюсь это поможет.
источник
Для записи, если вы столкнетесь с этой ошибкой после переключения с
LocalDB
наSQLEXPRESS
, убедитесь, что база данных уже существуетSQLEXPRESS
. Вы можете проверить это в Management Studio.У меня была такая же проблема при использовании
Entity Framework
после переключения наSQLEXPRESS from LocalDB
. Я должен был управлятьUpdate-Database
командой. Я смог успешно подключиться после этого.источник
Я сделал именно так, как сказал @JeffOgata, но получил ошибку:
Я снова посмотрел на свое сообщение об ошибке и там было сказано
Login failed for user 'IIS APPPOOL\DefaultAppPool'.
После добавления пользователя с именем
IIS APPPOOL\DefaultAppPool
все работает.источник
Я использовал SQL Server Profiler (доступен в меню SSMS => Сервис) и увидел там (когда IIS пытался подключиться к базе данных), что мой пользователь IIS по какой-то причине был NT AUTHORITY \ IUSR, независимо от всех шагов, рекомендуемых в ответах на этот вопрос , Поэтому я добавил этого пользователя в SQL Server, и это сработало ...
источник
В веб-форме Asp.net,
эта ошибка исправлена при установке asp.net из:
Диспетчер серверов> Управление> Добавить роль и компонент> Роли сервера> Веб-сервер (IIS)> Веб-сервер> Разработка приложений> ASP.NET 3.5 / 4.6 установлен.
моя проблема исправлена.
источник