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

StackOverflow https://stackoverflow.com/questions/1817694

Вопрос

Я вытащил ASPNETDB.MDF файл с сервера для сайта ASP с использованием форм аутентификации на моем локальном компьютере.Я добавил нового пользователя в файл базы данных с помощью инструмента настройки веб-сайта ASP.NET.Я загрузил файл MDF обратно на сервер, и теперь я получаю следующее исключение всякий раз, когда пытаюсь войти в систему как любой пользователь:

Cannot open user default database. Login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

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

На сервере установлен SQL Server 2008, и это то, что я использую на своем локальном компьютере с VS 2008 Professional.

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

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

Я новичок в SQL Server, поэтому я почти уверен, что где-то что-то напутал.

Мы очень ценим любую помощь.

Это было полезно?

Решение

Все вопросы о том, кто, что или почему касается конфигурации, оставим в стороне...

Ваша проблема может быть выведена из строки подключения.Это будет работать локально с sql express, но не с самим sql на сервере.

Первая подсказка заключается в том, что только SqlExpress разрешает пользовательские экземпляры.На самом Sql вам нужно будет прикрепить mdf.

Если эта строка подключения работает на вашем компьютере в VS 2008, значит, у вас установлен SQL EXPRESS.Если эта строка подключения работает на сервере, значит, на сервере установлен SQL EXPRESS.

Если на сервере не установлен и не настроен Sql Express для разрешения пользовательских экземпляров, а я бы хотел надеяться, что это не так, эта строка подключения приведет к возникновению исключения при сбое входа в систему, с которым вы сталкиваетесь.

Я также интересуюсь вашей копией туда / обратно.Обычно активному mdf будет отказано в доступе, даже для копирования.

Пожалуйста, подтвердите версии Sql как на стороне клиента, так и на стороне сервера и попробуйте найти предыдущую копию обоих файлов web.config, чтобы сравнить строки подключения.

Другие советы

Я думаю, что ваша проблема в том, что вы не отслеживаете разницу между логином базы данных и пользователем базы данных. Логин дает доступ к SQL Server ( в общем). Пользователь базы данных - это логин, которому был предоставлен доступ к определенной базе данных. Когда вы копируете файлы туда и обратно, как вы это сделали, вы можете сделать недействительным базовый идентификатор учетной записи для входа (особенно для учетных записей Windows).

Я бы предложил использовать учетную запись SQL для входа на сервер SQL (а не учетную запись Windows) и поместить учетные данные в файл web.config. Я просто обнаружил, что это гораздо проще в настройке, использовании и изменении, чем учетная запись Windows. После того, как ваш логин настроен, просто убедитесь, что он также имеет доступ пользователя к базе данных на сервере, который вы хотите использовать. Вы можете по-прежнему сталкиваться с проблемами передачи (хотя они менее вероятны), но исправить их немного проще.

Важное замечание: другие не согласны - утверждая, что учетные записи Windows более безопасны, - возможно, вы захотите изучить эту проблему!

Ваше описание проблемы является неполным или не соответствует сути ошибки.Вам нужно будет предоставить немного больше информации для лучшего ответа, но вот мой предварительный ответ.

Ошибка указывает на то, что ваше приложение использует встроенную аутентификацию в SQL.Таким образом, это помогло бы увидеть строку подключения.Вероятно, где-то там написано "SSPI".Это означает, что пользователь, от имени которого запущен контейнер приложения (СЕТЕВАЯ СЛУЖБА), пытается подключиться к базе данных, но не может, поскольку у него нет на это разрешения.

Таким образом, вы либо изменили строку подключения как часть того, что вы сделали, либо СЕТЕВАЯ СЛУЖБА ранее была пользователем базы данных (не очень хорошая идея, я думаю).

В вашем web.config могут быть задействованы другие параметры, связанные с безопасностью.Похоже, что ваше приложение использует проверку подлинности с помощью форм.Если IIS настроен на разрешение анонимного доступа, а ваш web.config настроен на олицетворение, то это также может привести к тому, что СЕТЕВАЯ СЛУЖБА попытается подключиться к SQL.

Как приложение должно подключаться?Есть ли у вас учетная запись службы (учетная запись единого пользователя), через которую должны проходить все пользователи, проходящие аутентификацию с помощью forms authentication для операций с базой данных?Если это так, то вам нужно изменить строку подключения к базе данных, чтобы она содержала пользователя и пароль.

Чтобы исправить это, вам необходимо проверить строку подключения, любые параметры, связанные с forms-auth, в web.config и параметры безопасности в IIS.Я не думаю, что все это имеет отношение к тому факту, что вы добавили пользователя.

Редактировать:Итак, вы используете Интегрированную систему безопасности, как я и подозревал.Это не будет работать с Forms Auth, потому что, пока пользователь проходит аутентификацию в вашем приложении со своим идентификатором пользователя, ваше приложение проходит аутентификацию в базе данных со встроенной аутентификацией, т.е.СЕТЕВАЯ СЛУЖБА.Вам нужна учетная запись службы базы данных, imo, и я не знаю, как это могло работать раньше, если вы не меняли строку подключения.

Можете ли вы попробовать изменить это Пулы приложений -> Расширенные настройки - > Модель процесса - > тождественность

Я получил ту же ошибку и исправил ее, изменив модель процесса.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top