C # asp.net не может открыть базу данных пользователя по умолчанию .ldf может быть неверным - PullRequest
0 голосов
/ 25 января 2009

У меня странная проблема с моей базой данных SQL Server express 2005. Он работает на сервере 2003 года. С VS2005 я могу получить доступ к БД без каких-либо проблем. Но когда я пытаюсь запустить приложение, я получаю:

 Cannot open user default database. Login failed.  Login failed for user 'NT AUTHORITY\NETWORK SERVICE'......... .ldf may be incorrect.

Я гарантировал, что NETWORK SERVICE имеет полный доступ к папке веб-сайта и всем его подпапкам.

Я заметил, что когда я смотрю на свойства App_Data, он имеет серый флажок только для чтения. Файл .MDF не только для чтения, но я не могу удалить эту серую галочку. Я пытался просто щелкнуть по нему до тех пор, пока он не исчезнет, ​​и применить изменения, я попробовал ATTRIB . -r, но, похоже, ничего не изменило.

Я очень смущен.

Jon

Ответы [ 4 ]

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

Просто была эта проблема. Мы использовали файл базы данных в папке App_Data.

"кажется, у меня все еще была открыта БД в моей IDE (Visual Web Developer Express), в проводнике баз данных. Щелкните правой кнопкой мыши базу данных и выберите" закрыть соединение ", чтобы исправить это."

(спасибо на форумах asp.net )

1 голос
/ 25 января 2009

Вы действительно используете экземпляр SQL Server Express или просто используете файл базы данных в папке App_Data?

Если вы используете экземпляр SQL Server и у вас установлена ​​ SQL Server Management Studio Express , вы должны сделать что-то подобное, чтобы предоставить учетной записи «Сетевая служба» доступ к базе данных (подумав об этом). , вы должны иметь возможность указать Management Studio на mdf в папке App_Data и сделать то же самое):

  1. Откройте SQL Management Studio, подключитесь к базе данных и откройте ее в обозревателе объектов.
  2. На уровне сервера (MachineName \ SQL Express) разверните раздел «Безопасность» - проверьте, что пользователь еще не находится в разделе «Вход в систему» ​​ниже.
  3. Если нет, щелкните правой кнопкой мыши «Logins», «New Login ...»
  4. Убедитесь, что для типа входа установлено «Проверка подлинности Windows», затем можно выполнить одно из следующих действий:
    1. Нажмите «Поиск ...», затем «Дополнительно ...», затем «Найти сейчас», дважды щелкните «Служба NT», «Ок» в следующем диалоговом окне.
    2. Просто введите «NT Authority \ Network Service» в поле «Имя для входа:».
  5. Затем на странице «Сопоставление пользователей» (выбранной на левой панели) поставьте галочку рядом с базой данных, к которой этот пользователь должен получить доступ.
  6. Если у вас есть роли базы данных (например, если в этой базе данных по умолчанию установлены членство / таблицы / роли / таблицы профилей ASP.NET и т. Д.), Убедитесь, что вы предоставили пользователю правильную роль - например, aspnet_Membership_BasicAccess.

Надеюсь, это поможет.

0 голосов
/ 07 мая 2009

Я предполагаю, что вы используете неанглийскую операционную систему.

Каким-то образом по каким-либо причинам имя входа для сетевой службы иногда локализуется при переводе ОС на другие языки.

В настоящее время многие программы ожидают, что имя входа будет жестко задано как «NT AUTHORITY \ NETWORK SERVICE» - например, в немецкой версии Windows имя учетной записи - «NT-AUTORITÄT \ NETZWERKDIENST». Итак, ваша программа ищет английское имя, не может его найти и выдает ошибку.

Даже некоторые программы Microsoft попадают в эту ловушку и показывают подобные ошибки при установке!

0 голосов
/ 25 января 2009

Разница не связана с ACL на папке, а с тем фактом, что контекст безопасности сопоставлен с пользователем в БД. Ваша БД будет иметь сопоставление для вашей учетной записи пользователя, вероятно, в dbo.

Если учетная запись сетевой службы будет использовать БД, вам необходимо создать пользователя в базе данных для сопоставления с учетной записью компьютера.

...