Ошибка соединения SQLExpress в IIS 7 с ошибкой экземпляра пользователя - «Не удалось создать экземпляр пользователя - PullRequest
2 голосов
/ 09 сентября 2011

В основном хочу ответить на мой вопрос № 1 ниже, но хотелось бы получить больше знаний.

Я пытался использовать эти ресурсы во время моего расследования, но безуспешно:

http://social.msdn.microsoft.com/Forums/en/sqldatabaseengine/thread/f5eb164d-9774-4864-ae05-cac99740949b ( Для этой ошибки: Не удалось создать пользовательский экземпляр SQL Server из-за сбоя при получении пути к данным локального приложения пользователя. Убедитесь, что пользователь имеет локальный профиль пользователя на компьютере. Соединение будет закрыто. )

http://social.msdn.microsoft.com/forums/en-US/sqlexpress/thread/6dfdcc22-7a81-4e8f-a947-c1ce6982d4b3/ ( Для этой ошибки: В мастере базы данных отказано в разрешении CREATE DATABASE. Попытка присоединить базу данных с автоматическим именем для файла? Не удалась. База данных с тем же имя существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC. )

Вопросы

1.) Почему эта ошибка возникает при запуске проекта Telerik Rad Controls для ASP.NET AJAX "Live Demos" с IIS 7 (Запуск Telerik Live Demos работает нормально с использованием ASP.NET Development Server с этой строкой подключения)

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

2.) Чем создание экземпляров SQL Server Express отличается в IIS 7 от сервера разработки ASP.NET и SSMSE

3.) Существуют ли определенные атрибуты строки подключения SQL, которые не разрешены при работе веб-сайта в разных контекстах (на основе # 2).

Окружающая среда:

Я не запускаю веб-приложение ASP.NET «Live Demos» .NET 3.5 через сервер разработки ASP.NET (функция, которая появляется в панели задач и выбирает порт для вас после нажатия кнопки воспроизведения в Visual Studio) , Это работает просто отлично! Я использую веб-сайт на IIS 7. SQL Server Express использует пользователя NETWORK SERVICE в Панели управления> Администрирование> Службы> SQL Server (SQLExpress).

Используя эту строку подключения, прилагаемую к демонстрационному проекту веб-приложения "Live Demos":

<add name="NorthwindConnectionString"
             connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|Northwind.mdf;Integrated Security=True;User Instance=True"
             providerName="System.Data.SqlClient" />

Я попытался установить "User Instance = False", но это просто выдает другую ошибку:

Запрещено разрешение CREATE DATABASE в хозяине базы данных. Попытка присоединить базу данных с автоматическим именем для файла? не удалось. База данных с тем же именем существует, или указанный файл не может быть открыт, или он находится на общем ресурсе UNC.

(где «?» - путь к файлу * .mdf - C: \ Users \\ MyDocuments \ Visual Studio 2008 \ Projects \ TelerikDemos \ Telerik \ RadControls для ASP.NET AJAX Q2 2011 \ Live Demos \ App_Data \ Northwind.mdf .. У некоторых из этих символов курсив переполнения стека нарушен, поэтому мне пришлось удалить этот путь)

Кто-то ответил мне на предыдущий вопрос, чтобы установить это «User Instance = False», но кажется, что пользовательские экземпляры не имеют никакого отношения к тому, используете ли вы SQL Express или нет. Пользовательские экземпляры - это просто функция SQL Express, которая позволяет очень непривилегированному пользователю размещать экземпляр базы данных в своем собственном пользовательском контексте.

Обратите внимание, что эта база данных Northwind хранится в файле * .mdf в папке App_Data (в корневом каталоге приложения «Live Demos») вместе с * .ldf (файл журнала). Ранее я пытался прикрепить файлы * .mdf в качестве реальных баз данных в папке «Базы данных» (в дереве обозревателя объектов SSMSE), но позже удалил их.

В корневой папке веб-приложения «Live Demos» (и вложенных папках / файлах) следующие пользователи имеют ВСЕ привилегии:
- IIS APPPOOL \ Telerik («Telerik» - это имя моего пула приложений в IIS 7 для этого сайта)
- IUSR
- СЕТЕВАЯ СЛУЖБА

Создание заметки для себя об этом запросе главной базы данных SQLExpress:

SELECT * FROM sys.dm_os_child_instances

Также пробовал различные комбинации разрешений * .mdf & * .ldf, одновременно меняя пользователя в службе Windows 7 SQL Server (SQLExpress) (Панель управления> Администрирование> Службы) .. и также перезапускал службу после выполнения этих меняется.

enter image description here

Воспроизвести:

загрузить Telerik Rad Controls для ASP.NET AJAX. Установите разрешения, которые я упомянул в папке «Live Demos» в папке «Program Files \ Telerik», измените версию .NET веб-приложения на .NET 3.5, замените их 3.5 файл web.config с обычным файлом web.config в этой папке , Вы должны использовать Visual Studio 2010, но я запускаю это в Visual Studio 2008 (с небольшой тяжелой работой, которую я сделал, потому что наша компания еще не на VS2010). Также переключите правильные сборки Bin35 в папку Bin «Live Demos». Скомпилируйте решение. Создайте веб-сайт IIS 7. Добавьте проверку подлинности Windows. Включена анонимная аутентификация и аутентификация Windows .. все остальные отключены. Установите пул приложений для использования Classic и 32 bit.

Затем перейдите по этому URL и щелкните изображение «Первый взгляд».

http://localhost/combobox/examples/overview/defaultcs.aspx

====================

По запросу будет предоставлено больше доказательств.

Ответы [ 2 ]

2 голосов
/ 10 сентября 2011

Вы используете строку подключения с доверенной аутентификацией = true.Это означает, что соединение использует контекст безопасности вызывающего процесса.

Когда вы работаете с сервером разработки, вы работаете в контексте безопасности вошедшего в систему пользователя, поэтому все работает нормально.

Когда вы работаете в IIS, вы находитесь в контексте безопасности процесса пула приложений, который называется NETWORK SERVICE, у которого нет профиля пользователя, поэтому он падает.

Это можно исправить одним из следующих способов:

  • Изменить удостоверение пула приложений на обычного пользователя с доступом к базе данных
  • Использовать строку подключения с именем пользователя и паролем
0 голосов
/ 22 марта 2018

IIS не загружает профиль пользователя Windows, но некоторые приложения могут использовать его в любом случае для хранения временных данных. SQL Express является примером приложения, которое делает это. Однако необходимо создать профиль пользователя для хранения временных данных либо в каталоге профиля, либо в кусте реестра. Профиль пользователя для учетной записи сетевой службы был создан системой и всегда был доступен. Однако с переключением на уникальные идентификаторы пула приложений система не создает ни одного профиля пользователя. Только стандартные пулы приложений (DefaultAppPool и Classic .NET AppPool) имеют профили пользователей на диске. Профиль пользователя не создается, если администратор создает новый пул приложений.

Однако при желании вы можете настроить пулы приложений IIS для загрузки профиля пользователя, установив для атрибута LoadUserProfile значение «true».

https://docs.microsoft.com/en-us/iis/manage/configuring-security/application-pool-identities

...