Я знаю, что это почти дубликат: Ошибка "Ошибка входа для пользователя" 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? Но это то, что одна ссылка говорит мне сделать, чтобы решить эту проблему.