Невозможно открыть базу данных пользователя по умолчанию - PullRequest
2 голосов
/ 30 ноября 2009

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

Cannot open user default database. Login failed.<br> 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, поэтому уверен, что что-то напутал.

Любая помощь очень ценится.

Ответы [ 4 ]

2 голосов
/ 10 февраля 2010

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

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

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

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

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

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

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

1 голос
/ 30 ноября 2009

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

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

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

0 голосов
/ 10 февраля 2010

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

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

0 голосов
/ 30 ноября 2009

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

Ошибка указывает, что ваше приложение использует встроенную аутентификацию в SQL. Таким образом, это поможет увидеть строку подключения. Скорее всего, где-то написано «SSPI». Это означает, что пользователь, для которого выполняется контейнер приложения (NETWORK SERVICE), пытается подключиться к базе данных, но не может, потому что у него нет разрешения на это.

Таким образом, вы либо изменили строку подключения как часть того, что сделали, либо NETWORK SERVICE ранее был пользователем базы данных (я думаю, это не очень хорошая идея).

В вашем web.config возможны другие настройки безопасности. Ваше приложение, похоже, использует проверку подлинности форм. Если IIS настроен для разрешения анонимного доступа, а ваш web.config настроен на олицетворение, то это также может привести к попытке NETWORK SERVICE подключиться к SQL.

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

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

Edit: Таким образом, вы используете встроенную безопасность, как я и подозревал. Это не будет работать с Forms Auth, потому что, пока пользователь аутентифицируется в вашем приложении с помощью своего идентификатора пользователя, ваше приложение аутентифицируется в базе данных с интегрированной аутентификацией, то есть NETWORK SERVICE. Вам нужна учетная запись службы базы данных, imo, и я не знаю, как это могло работать раньше, если вы не изменили строку подключения.

...