Вопрос

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

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

Веб-бокс
Поле SQL
Тестовый блок SQL

Мое Заявление:

У меня есть 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 на веб-сервере разрешения, которыми обладает СЕТЕВАЯ СЛУЖБА, имеют полный контроль.

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

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

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

Решение

СЕТЕВАЯ СЛУЖБА и LocalSystem всегда будут аутентифицироваться как соответствующая учетная запись локально (встроенная \ network service и встроенная \ system), но обе будут аутентифицироваться как учетная запись компьютера удаленно.

Если вы видите неудачу, подобную Login failed for user 'DOMAIN\MACHINENAME$' это означает, что процесс, запущенный как СЕТЕВАЯ СЛУЖБА или как LocalSystem, получил доступ к удаленному ресурсу, аутентифицировал себя как учетную запись компьютера и получил отказ в авторизации.

Типичным примером может быть приложение ASP, запущенное в пуле приложений, настроенном на использование учетных данных СЕТЕВОЙ СЛУЖБЫ, и подключающееся к удаленному серверу SQL:пул приложений будет проходить проверку подлинности как машина запуск пула приложений и является ли эта учетная запись компьютера той, которой необходимо предоставить доступ.

Если доступ к учетной записи компьютера запрещен, то доступ должен быть предоставлен к этой учетной записи компьютера.Если сервер отказывается входить в систему 'DOMAIN\MACHINE$', то вы должны предоставить права входа в систему 'DOMAIN\MACHINE$', а не СЕТЕВОЙ СЛУЖБЕ.Предоставление доступа к СЕТЕВОЙ СЛУЖБЕ позволило бы Местные новости процесс, запущенный как СЕТЕВАЯ СЛУЖБА для подключения, а не удаленная, поскольку удаленная служба будет проходить аутентификацию как, как вы уже догадались, DOMAIN \MACHINE $.

Если вы ожидаете, что приложение asp подключится к удаленному SQL-серверу в качестве входа в систему SQL, и вы получаете исключения для ДОМЕНА \ MACHINE $, это означает, что вы используете встроенную защиту в строке подключения.Если это неожиданно, это означает, что вы перепутали используемые вами строки подключения.

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

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

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

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

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

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

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

В своем местном менеджере IIS -> сайтов -> веб-сайт по умолчанию -> Наше имя веб-сайта -> Основные настройки ... Бассейн приложения был «DealeAppPool» вместо нашего пользовательского пула приложений.

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

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

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

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

  • Веб-приложение работает под ApplicationPoolidentity
  • Веб приложение Подключение к базам данных через Ado.net с помощью аутентификации Windows в строке подключения

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

Мое соединение с базой данных находится в режиме аутентификации Windows. Поэтому я решил это, просто изменив Бассейны приложений Идентичность ApplicationPoolidentity. в мою домену войти в учетные данные Доменное имя myLoginiD

Шаг:

  1. Нажмите на Бассейны приложений
  2. Выберите имя вашего приложения

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

  4. Расширять Модель процесса и нажмите Личность. Отказ Нажмите три точка на правом конце.
  5. Щелчок Задавать... кнопка и предоставить свой журнал домена в учетных данных

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

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

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

Настройки могут быть выполнены в Internet Information Server (IIS 7+)> Пулы приложений> Просвещенные настройки> Модель процесса> Identity

Для меня проблема с «доменом machinemname $ ', исправленным путем настройки DefaultApplicationPool Идентичность NetworkService.

enter image description here

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

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

Проверьте, если у вас есть

User Instance=true

в соединительной строке. Попробуйте удалить его, что разрешит вашу проблему.

У меня также была эта ошибка с аутентифицированным пользователем SQL Server

Я попробовал некоторые исправления, но они не работали.

Решение в моем случае было настроить его «режим аутентификации сервера», чтобы разрешить аутентификацию SQL Server, в разделе «Свойства управления»: «Свойства / безопасность».

Единственным точком того, что все, кажется, упускают из виду, это то, что вы можете захотеть интегрированную безопасность = True. У вас может быть сайт работает под учетной записью бассейна. Это все хорошо, так и все еще возможно ударить SQL Server с оригинальным учетным элементом пользователя, а не в пул. Это называется ограниченная делегация. Если вы включите его и настройте SPN Windows, переводит учетные данные пула с запросами пользователей, переходя на окончательную службу (SQL - это только одна такая служба). Вы должны зарегистрировать один и только SQL Server, который сервисы SQL-запросы на веб-сервере. Установка этого все слишком много для меня, чтобы попытаться точно описать здесь. Мне потребовалось совсем некоторое время, чтобы работать через нее сам.

Я провел несколько часов, пытаясь решить проблему, и я наконец-то получил - браузер SQL Server был «остановлен». Исправление - это изменить его в режим «Автоматический»:

Если оно отключено, перейдите к панели управления -> Административные инструменты-> Услуги, и ищите агент SQL Server. Щелкните правой кнопкой мыши и выберите «Свойства». Из раскрывающегося списка «Тип запуска» изменится от «отключенного» на «Автоматический».

цитата отсюда

У меня был такой же проблема ранее, удаляя Persist Security Info=True От ConnectionString работал для меня.

Я столкнулся с этой проблемой, когда клиент переименован в SQL Server. Служба отчетности SQL была сконфигурирована для подключения к старому имени сервера, которое они также создали псевдоним для этого перенаправленными на IP-адрес нового имени сервера.

Все их старые приложения IIS работали, перенаправляясь на новое имя сервера через псевдоним. На дошке я проверил, работали ли они SSRS. Попытка подключения к сайту SSRS давила ошибку:

«Сервис недоступен. "

Он работал на сервере, но не подключаю, потому что он использовал псевдоним для старого имени сервера. Перезапись SSRS Чтобы использовать новое имя сервера вместо старых / псевдоним.

  1. Изменить идентичность пула приложения в локальную систему
  2. На SQL MGMT> Безопасность> Логины
    1. Найти авторитет NT System Двойной щелчок
    2. Пользовательские сопоставления> Проверьте вашу базу данных и дайте ему роль ниже.
    3. Помните также для создания базы данных пользовательских данных O Security Logins с правильным паролем.

Я получил эту ошибку, пытаясь проверить решение, используя следующие

string cn = "Data Source=[servername];Integrated Security=true;Initial Catalog=[dbname];";

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

Поэтому, если ваша проблема похожа на мою: Установите VS к панели задач, затем используйте Shift и Щелкните правой кнопкой мыши, чтобы открыть меню, чтобы открыть VS, как другой пользователь.enter image description here

Здесь оцените здесь несколько хороших ответов, но, как я только что потерял время, работая в этом, надеюсь, это может помочь кому-то.

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

IIS работал в качестве сетевой службы и сетевой службы ранее установленные на SQL Server (см. Другие ответы на этот пост). Серверные роли и сопоставления пользователей выглядели правильно.

Вопрос был; для абсолютно нет видимой причины; Сетевая служба переключилась на права «отрицать» в базе данных.

Чинить:

  1. Открыть SSMS> Безопасность> Логины.
  2. Щелкните правой кнопкой мыши «NT Authority Network Service» и нажмите «Свойства».
  3. Перейдите на вкладку «Статус» и установить Permission to Connect To Database Engine Наградить'.

Network Service Allowed

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