Ошибка входа для пользователя 'DOMAIN \ MACHINENAME $' - PullRequest
107 голосов
/ 11 мая 2010

Я знаю, что это почти дубликат: Ошибка "Ошибка входа для пользователя 'NT AUTHORITY \ IUSR'" в ASP.NET и SQL Server 2008 и Ошибка входа для имени пользователя пользователя '- System.Data.SqlClient.SqlException с LINQ во внешнем проекте / библиотеке классов , но некоторые вещи не складываются по сравнению с другими приложениями на моем сервере, и я не уверен, почему.

Используемые коробки:

Веб-бокс
SQL Box
SQL Test Box

Мое приложение:

У меня есть веб-приложение ASP.NET, которое ссылается на библиотеку классов, использующую LINQ-to-SQL. Строка подключения настроена правильно в библиотеке классов. Согласно Ошибка входа в систему для пользователя 'username' - System.Data.SqlClient.SqlException с LINQ во внешней библиотеке проектов / классов Я также добавил эту строку подключения в веб-приложение.

Строка подключения использует учетные данные SQL как таковые (как в веб-приложении, так и в библиотеке классов):

 <add name="Namespace.My.MySettings.ConnectionStringProduction"
        connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
        providerName="System.Data.SqlClient" />

Это соединение подтверждено как работающее, добавив его в обозреватель сервера. Это строка подключения, которую использует мой файл .dbml.

Проблема:

Я получаю следующую ошибку:

System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.

Теперь ссылка на это Ошибка «Не удалось войти в систему для пользователя NT AUTHORITY \ IUSR» в ASP.NET и SQL Server 2008 говорит, что это действительно локальная сетевая служба и используется любое другое не доменное имя не будет работать.

Но я запутался, потому что я проверил и SQL Box, и SQL Test Box SQL Management Studio, и оба имеют NT AUTHORITY/NETWORK SERVICE в разделе Безопасность -> Вход в систему, на уровне базы данных, которого нет в списке Безопасность -> Пользователи, но на уровне базы данных Безопасность -> Пользователи У меня есть пользователь, отображаемый в строке подключения.

На уровне NTFS на веб-сервере разрешения имеют полный контроль над NETWORK SERVICE.

Причина, по которой я в замешательстве, заключается в том, что на моем веб-сервере есть много других веб-приложений, которые ссылаются на базы данных SQL Box и SQL Test Box, и все они работают. Но я не могу найти разницу между ними и моим текущим приложением, кроме того, что я использую библиотеку классов. Будет ли это иметь значение? Проверка разрешений NTFS, настройка входов в систему безопасности на уровне сервера и базы данных, строка подключения и метод подключения (учетные данные SQL Server), а также пул приложений IIS и другие параметры папок - все одинаковые.

Почему эти приложения работают без добавления имени машины $ к разрешениям любого из моих блоков SQL? Но это то, что одна ссылка говорит мне сделать, чтобы решить эту проблему.

Ответы [ 19 ]

144 голосов
/ 11 мая 2010

NETWORK SERVICE и LocalSystem всегда будут аутентифицироваться как соответствующая учетная запись локально (встроенный \ сетевой сервис и встроенный \ системный), но оба будут аутентифицироваться как учетная запись компьютера удаленно.

Если вы видите сбой, такой как Login failed for user 'DOMAIN\MACHINENAME$', это означает, что процесс, выполняющийся как NETWORK SERVICE или как LocalSystem, получил доступ к удаленному ресурсу, аутентифицировался как учетная запись компьютера и был отклонен для авторизации.

Типичным примером может быть приложение ASP, работающее в пуле приложений, настроенном на использование учетных данных NETWORK SERVICE, и подключение к удаленному серверу SQL: пул приложений будет аутентифицироваться как компьютер , на котором запущен пул приложений, и является эта учетная запись компьютера, которой необходимо предоставить доступ.

Если доступ к учетной записи компьютера запрещен, доступ к учетной записи компьютера должен быть предоставлен. Если сервер отказывается войти в систему «DOMAIN \ MACHINE $», вы должны предоставить права входа в систему для «DOMAIN \ MACHINE $», а не для NETWORK SERVICE. Предоставление доступа к NETWORK SERVICE позволило бы подключиться процессу local , работающему как NETWORK SERVICE, а не удаленному, поскольку удаленный будет аутентифицироваться как, как вы уже догадались, DOMAIN \ MACHINE $.

Если вы ожидаете, что приложение asp подключится к удаленному SQL Server в качестве имени входа SQL, и вы получите исключения для DOMAIN \ MACHINE $, это означает, что вы используете Integrated Security в строке подключения. Если это неожиданно, это означает, что вы испортили используемые вами строки подключения.

28 голосов
/ 29 октября 2011

Эта ошибка возникает, когда вы настроили приложение с IIS, и IIS переходит на SQL Server и пытается войти в систему с учетными данными, которые не имеют надлежащих разрешений. Эта ошибка также может возникать при настройке репликации или зеркального отображения. Я расскажу о решении, которое работает всегда и очень просто. Перейдите в раздел SQL Server >> Безопасность >> Логины и щелкните правой кнопкой мыши NT AUTHORITY \ NETWORK SERVICE и выберите Свойства

В открывшемся окне «Свойства входа в систему» ​​перейдите на вкладку «Сопоставление пользователей». Затем на вкладке «Сопоставление пользователей» выберите нужную базу данных, особенно базу данных, для которой отображается это сообщение об ошибке. На нижнем экране проверьте роль db_owner. Нажмите ОК.

13 голосов
/ 29 марта 2016

В моем случае для пула приложений IIS у меня было Identity="ApplicationPoolIdentity".

После того, как я добавил IIS APPPOOL\ApplicationName пользователя в SQL Server, он работает.

11 голосов
/ 13 июня 2011

Уловка, которая сработала для меня, заключалась в том, чтобы удалить Integrated Security из моей строки подключения и добавить обычную User ID=userName; Password=password строку подключения в App.config вашего февраля, возможно, не используется встроенная защита, но созданная в Web.config is!

11 голосов
/ 26 января 2012

У коллеги была та же ошибка, и это было из-за небольшой ошибки конфигурации в IIS.
Для веб-приложения был назначен неправильный пул приложений.

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

В своем локальном диспетчере IIS -> Сайты -> Веб-сайт по умолчанию -> Имя нашего веб-приложения -> Основные настройки ... Пул приложений был "DefaultAppPool" вместо нашего пользовательского пула приложений.

Установка правильного пула приложений решила проблему.

10 голосов
/ 16 августа 2011

Я добавил <identity impersonate="true" /> в мой web.config, и он работал нормально.

9 голосов
/ 11 февраля 2017

В основном, чтобы решить эту проблему, нам нужно настроить некоторые параметры, например

  • Веб-приложение, работающее под ApplicationPoolIdentity
  • Веб-приложение, подключающееся к базам данных через ADO.Net с использованием проверки подлинности Windows в строке подключения

Строка подключения, используемая при аутентификации Windows, включает атрибут Trusted_Connection=Yes или эквивалентный атрибут Integrated Security=SSPI в Web.config file

Мое соединение с базой данных находится в режиме аутентификации Windows. Поэтому я решил эту проблему, просто изменив Прикладные пулы Удостоверение с ApplicationPoolIdentity на учетные данные для входа в мой домен DomainName \ MyloginId

Шаг:

  1. Нажмите Пулы приложений
  2. Выберите название вашей заявки

  3. Перейти к Расширенные настройки

  4. Разверните Модель процесса и нажмите Идентичность . Нажмите три точка на правом конце.
  5. Нажмите Установить ... кнопку и введите логин вашего домена логин

Для меня это было решено.

Примечание: В производственной или ИТ-среде вы можете иметь учетную запись службы в одном домене для идентификации пула приложений. Если это так, используйте учетную запись службы вместо вашего логина.

5 голосов
/ 10 июля 2013

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

Настройки можно выполнить на Информационном сервере Интернета (IIS 7+)> Пулы приложений> Дополнительные параметры> Модель процесса> Идентичность

2 голосов
/ 03 мая 2018

Для меня проблема с 'DOMAIN \ MACHINENAME $' исправлена ​​установкой DefaultApplicationPool Удостоверения на NetworkService.

enter image description here

2 голосов
/ 19 июня 2013

При обработке базы данных служб аналитики мы получали похожие сообщения об ошибках. Оказалось, что имя пользователя, которое использовалось для запуска экземпляра служб Analysis Services, не было добавлено в логины безопасности SQL Server.

В SQL Server 2012 службы SQL Server и службы Analysis Services по умолчанию настроены на работу с разными пользователями. Если вы перешли к настройкам по умолчанию, всегда убедитесь, что пользователь AS имеет доступ к вашему источнику данных!

...