Ошибка входа пользователя 'NT AUTHORITY \ NETWORK SERVICE' - PullRequest
30 голосов
/ 12 февраля 2010

Я боролся с этим уже 2 дня, не подходя ближе к решению. Я прочитал 20-30 тем alteast, но до сих пор не могу решить эту проблему.

Пожалуйста, помогите мне.

Я отключил анонимную аутентификацию, включил олицетворение asp.net.

Я добавил <identity impersonate = "true" />

Я добавил пользователя в логины безопасности, который подключен к базе данных, к которой я пытаюсь подключиться

Это строка подключения, которую я использую:

Data Source=IPTOSERVER;Initial Catalog=Phaeton;User Id=User;Password=Password;

ErrorMessage:

Невозможно открыть базу данных "Phaeton.mdf", запрошенную при входе в систему. Ошибка входа.

Ошибка входа пользователя 'NT AUTHORITY \ NETWORK SERVICE'.

Ответы [ 8 ]

83 голосов
/ 09 сентября 2010

У меня возникло похожее сообщение об ошибке, которое я заметил в средстве просмотра событий Windows:

Ошибка входа для пользователя 'NT AUTHORITY \ NETWORK SERVICE'. Причина: не удалось открыть явно указанную базу данных. [КЛИЕНТ: локальный компьютер]

Решение, которое решило мою проблему:

  1. Вход в SqlExpress через SQL Server Management Studio
  2. Перейдите в каталог «Безопасность» базы данных
  3. Щелкните правой кнопкой мыши каталог Users
  4. Выберите «Новый пользователь ...»
  5. Добавить 'NT AUTHORITY \ NETWORK SERVICE' в качестве нового пользователя
  6. В области Членство в роли данных выберите db_owner
  7. Нажмите OK

Вот скриншот выше: Screenshot of adding new user Network Service as db_owner to SqlExpress

8 голосов
/ 08 июня 2012

Если сообщение об ошибке просто

"Ошибка входа для пользователя 'NT AUTHORITY \ NETWORK SERVICE'.", Затем предоставить разрешение на вход в систему для NT NTHORITY \ NETWORK SERVICE

с помощью

"sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'" 

иначе, если сообщение об ошибке похоже на

"Невозможно открыть базу данных" Phaeton.mdf ", запрошенную при входе в систему. не удалось. Не удалось войти в систему для пользователя 'NT AUTHORITY \ NETWORK SERVICE'. "

попробуйте использовать

"EXEC sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'" 

в вашей базе данных "Phaeton".

8 голосов
/ 12 февраля 2010

Сообщение об ошибке, которое вы получаете, говорит о том, что приложению не удалось подключиться к базе данных sqlexpress, а не к серверу sql. Я просто изменю имя базы данных на сервере sql, а затем соответствующим образом обновлю строку подключения и попробую снова.

Ваше сообщение об ошибке гласит следующее:

Cannot open database "Phaeton.mdf" requested by the login. The login failed.

Мне кажется, вы все еще пытаетесь подключиться к файловой базе данных, имя "Phaeton.mdf" не совпадает с вашим новым именем базы данных sql "Phaeton".

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

6 голосов
/ 18 мая 2012

Мне понравилось решение Джеда, но проблема с ним заключалась в том, что каждый раз, когда я строил свой проект в режиме отладки, он развертывал мой проект базы данных и снова удалял пользователя. поэтому я добавил этот сценарий MySQL в сценарий после развертывания. он практически выполняет то, что сказал Джед, но создает пользователя каждый раз, когда я развертываю.

CREATE USER [NT AUTHORITY\NETWORK SERVICE]
    FOR LOGIN [NT AUTHORITY\NETWORK SERVICE]
    WITH DEFAULT_SCHEMA = dbo;
Go

EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'
2 голосов
/ 12 февраля 2010

Вы сказали, что он работал нормально, когда вы использовали SQL Express Edition. По умолчанию экспресс-выпуски создают именованный экземпляр и запускаются в NT Authority \ Network Service.

SQL Server STD по умолчанию устанавливает экземпляр по умолчанию и запускается в NT Authority \ SYSTEM.

У вас установлена ​​полная версия SQL и экспресс-версия на одном компьютере?

  1. Возможно, что где-то строка подключения по-прежнему ссылается на именованный экземпляр 'SQLEXPRESS', а не на экземпляр по умолчанию, созданный полной версией.

  2. Кроме того, где определяется строка подключения? В IIS или ваш код? Убедитесь, что если они определены во многих местах, все они указывают на один и тот же экземпляр SQL и базу данных.

  3. Также попробуйте просмотреть подробную ошибку, присутствующую в журналах ошибок SQL Server. Ошибка, зарегистрированная в журнале событий, не завершена по серьезным причинам. Это также поможет вам узнать, было ли установлено соединение с правильным SQL Server.

  4. Также убедитесь, что машина, на которой установлен SQL, доступна и IIS пытается получить доступ к той же машине. В моей компании иногда из-за неправильного разрешения имен запрос не выполняется, так как на большинстве наших компьютеров установлен SQL, и запрос попадает в неправильный SQL Server.

  5. Убедитесь, что база данных существует в SQL Server. Имя, отображаемое в базах данных в SQL Management Studio, должно совпадать с именем в строке подключения.

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

Требуется логин SQL Server DOMAIN\machinename$. Вот как выглядит вызов NT AUTHORITY\NETWORK SERVICE для SQL Server (и файловых серверов и т. Д.)

В SQL,

CREATE LOGIN [XYZ\Gandalf$] FROM WINDOWS
1 голос
/ 21 апреля 2013

Лучший способ - создать пользователя для вашего приложения и назначить разрешения, подходящие для этого пользователя. Не используйте «NT AUTHORITY \ NETWORK SERVICE», поскольку у вашего пользователя есть своя собственная уязвимость, и у этого пользователя есть разрешения на многие вещи на уровне ОС. Держитесь подальше от этого встроенного пользователя.

0 голосов
/ 13 октября 2014

Я использую Entity Framework для повторного заполнения своей базы данных, и пользователи переопределяются каждый раз, когда я генерирую базу данных.

Теперь я запускаю это каждый раз, когда загружаю новый DBContext:

cnt.Database.ExecuteSqlCommand("EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\\NETWORK SERVICE'");
...