Я знаю, что это почти дубликат: Ошибка «Не удалось войти в систему для пользователя NT AUTHORITY \ IUSR» в ASP.NET и SQL Server 2008 и Ошибка входа в систему для пользователя «имя пользователя» - System.Data.SqlClient.SqlException с LINQ в внешний проект / библиотека классов, но некоторые вещи не складываются по сравнению с другими приложениями на моем сервере, и я не уверен, почему.
Используемые ящики:
Web Box
SQL Box
Тестовое окно SQL
Мое заявление:
У меня есть веб-приложение ASP.NET, которое ссылается на библиотеку классов, использующую LINQ-to-SQL. Строка подключения настроена правильно в библиотеке классов. В соответствии с ошибкой входа в систему для имени пользователя - 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? Но это то, что мне говорит одна ссылка, чтобы решить эту проблему.