#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. Он начал работать. Спасибо вам!!