Не удается подключиться к базе данных Sql в приложении C # asp mvc с Entity Framework, НО тот же код работает с приложением Winform

#c# #asp.net #asp.net-mvc #winforms #entity-framework

#c# #asp.net #asp.net-mvc #winforms #entity-framework

Вопрос:

Прежде всего, пожалуйста, извините меня, если это звучит слишком грубо. Я считаю себя новичком в приложениях MVC. Я столкнулся со странной проблемой, и, похоже, из этого нет никакого выхода, по крайней мере, пока..Я везде посмотрел и не оставил камня на камне, чтобы это сработало. Наконец я обратился к этому форуму. Это мой первый пост, поэтому любые ошибки, пожалуйста, игнорируйте и направляйте меня.

Проблема многогранна…

Детали высокого уровня… Я создал веб-приложение C # ASP MVC, ожидающее загрузки на удаленный сервер (клиентский компьютер) Приложение использует Entity Framework — Подход Code First Подключается к базе данных с помощью системы аутентификации Windows

Сцена 1: Где работало приложение, я протестировал приложение на своем компьютере, и оно работало безупречно. В моей системе установлена экспресс-версия Sql Server Management Studio.

Сцена 2: Сбой приложения. Проблема — Общая картина Это отлично работает в моей системе, но при тестировании на удаленном сервере происходит сбой, приложению не удается подключиться к базе данных Sql удаленного сервера. Как только он пытается подключиться к базе данных, он выходит из строя с сообщением об ошибке «Ошибка входа для пользователя ‘<Имя пользователя>».

Я проверил все в строке подключения — например, имя источника данных правильное, Начальный Catlog также указывает на правильное имя базы данных, Встроенная безопасность = true, идентификатор пользователя или пароль не указаны

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

Строка подключения: ConnectionString=»Источник данных = RemoteComputerName; Начальный каталог = DatabaseName; Встроенная безопасность = True; MultipleActiveResultSets = true»

Я не могу точно определить, что вызывает ошибку — это мой код или настройки базы данных Sql Server — разрешения. Поскольку соединение сработало на моем локальном компьютере, что означает, что код правильный

Для того, чтобы проверить, работают ли разрешения sql server..Я создал частичное «приложение для тестового подключения» в WINFORM и загрузил на сервер, на этот раз код работает и считывает все данные таблицы.

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

Я совершенно сбит с толку тем, что работает в WINFORM, сбой в MVC.

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

пожалуйста, дайте мне знать, если я пропустил какие-либо подробности в этом сообщении.

Любая помощь высоко ценится!!!

Спасибо.

Комментарии:

1. Удаленный сервер SQL, к которому вы пытаетесь подключиться, работает ли ваш логин-пароль там?

2. onnectionstring? Вы много говорите обо всех деталях, но вы не предоставляете информацию, которая фактически ВЫПОЛНЯЕТ подключение, и ошибка ясно говорит, что это проблема с разрешением для пользователя.

3. Пожалуйста, отправьте свою строку подключения.

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

Ответ №1:

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

Поскольку вы упомянули «Интегрированная безопасность = true»………. затем вы должны знать, какой идентификатор запускает процесс (веб-сайт или winforms.exe )

При запуске от имени приложения winforms вы работаете как «вы» (скорее всего). Как и при входе пользователя в операционную систему Windows.

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

Ваша учетная запись службы не имеет доступа к sql-серверу.

Вы можете подробно прочитать здесь: https://support.microsoft.com/en-us/help/4466942/understanding-identities-in-iis#:~:text=ApplicationPoolIdentity: When a new application,also a least-privileged account .

Вы можете показать this……by перехватываю исключение, а затем что-то вроде этого:

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

 try
{
// some sql server access code
}
catch(Exception ex)
{
       throw new ArithmeticException("What is the real IIdentity: "   this.FindIIdentity(), ex);
}


private string FindIIdentity()
{

    try
        {

        //'Dim user As WindowsPrincipal = CType(System.Threading.Thread.CurrentPrincipal, WindowsPrincipal)

        //'Dim ident As IIdentity = user.Identity

        string returnValue = string.Empty;

        WindowsIdentity ident = WindowsIdentity.GetCurrent();

        returnValue = ident.Name;

        try
            {

            returnValue  = " on "   System.Environment.MachineName;

        } catch (Exception ex)
            {}

        return returnValue;

    } catch (Exception ex)
        {

        return "Error Finding Identity";

    }

}
  

Скриншоты IIS

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Спасибо за подробный пост. Я обновил свой вопрос с помощью строки подключения

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

3. Еще раз большое спасибо. Теперь я чувствую, что становлюсь еще ближе к решению. Хотя я не знал об идентификаторах, я попытался запустить код, как вы показали выше. Я запустил код в Winform и в приложении MVC и получил два разных идентификатора. Да, идентификатор, указанный в winform, должен иметь доступ к серверу sql. Но поскольку это мой первый веб-проект, я мало что знаю о IIS, удостоверениях и других связанных материалах. Могу ли я попросить у вас немного больше указаний о том, как я могу убедиться, что идентификатор, который использует веб-приложение, имеет разрешение на доступ к базе данных?.. Еще раз спасибо

4.learn.microsoft.com/en-us/iis/manage/configuring-security/… . syncfusion.com/kb/6897/… . superuser.com/questions/1386426/…

5. Да, это сработало. Именем входа было системное имя типа «LANNAME MACHINENAME $». Я создал login с именем в Sql Server login и установил параметр проверки подлинности Windows. Он начал работать. Спасибо вам!!