#sql-server #vb.net
#sql-server #vb.net
Вопрос:
У меня есть VB.NET приложение, которое использует базы данных на сервере SQL. В настоящее время я тестирую приложение на том же компьютере, на котором размещен сервер.
Я подключаюсь к серверу через следующую строку подключения…
("Data Source = " amp; Master.CurrentIP.Text amp; ",1433;Network Library=DBMSSOCN;Initial Catalog=ExcelDM;User ID=" amp; Master.CurrentUser.Text amp; ";Password=" amp; Master.CurrentPass.Text amp; ";")
«Мастер.CurrentIP.Text» относится к моему общедоступному IP-адресу, а не к моему компьютеру.
В принципе, все работает отлично, когда я тестирую приложение на этом компьютере. Мне интересно, могу ли я использовать это в качестве теста для подключения других компьютеров или нет. Должен ли я размещать свой сервер на чем-то, что не является моим компьютером?
Чтобы уточнить, на сервере включены удаленные подключения, а переадресация портов (порт # 1433) открыта как для входящих, так и для исходящих сообщений через брандмауэр Windows и настройки переадресации портов моего маршрутизатора. Все параметры TCP / IP открыты в диспетчере конфигурации SQL и т. Д.
Комментарии:
1. Вы можете разместить свой SQL server в любом месте, где захотите, для тестирования — на вашем компьютере все в порядке. Я предполагаю, что при переходе к производству приложение будет подключаться через локальную сеть, а не через глобальную сеть? В любом случае, протокол подключения лучше использовать в файле конфигурации (а не в файле пользователя / пароля, в идеале вы должны использовать Windows security, если в домене или какой-либо другой метод аутентификации, если нет), а не жестко закодирован в приложении, таким образом, вы можете поддерживать гораздо больше конфигураций SQL server в случаевам нужно защитить его таким образом, который вы не учитывали в первую очередь.
2. Вы в основном спрашиваете, может ли каждый пользователь Интернета использовать ваш общедоступный IP-адрес для взаимодействия с вашей базой данных? Вы понимаете, какие проблемы с безопасностью возникают в этом сценарии?
3. @Steve, это приложение, которое я разрабатываю для личного использования с друзьями. Это многопользовательская среда, размещенная на SQL, для разработки кампаний Dungeons and Dragons. Я только хочу знать, является ли это пустой тратой времени на тестирование SQL-подключения через IP, когда сервер и приложение находятся в одной среде. Спасибо за ваши вопросы.
4. @Charleh, в вашем ответе много хороших моментов! Я впервые делаю что-то подобное. WAN или LAN; конфигурационный файл; безопасность Windows. Я немного погуглю на основе этих ключевых слов, большое спасибо!
5. @Charleh, приложение будет использоваться небольшой группой людей по всему миру. Поэтому я не буду использовать локальную сеть. Предпочтительнее WAN? И как это относится к моему коду; сетевая библиотека?
Ответ №1:
Основываясь на ваших комментариях, я бы сделал следующие предположения:
- У вас нет никаких конфиденциальных данных, поэтому безопасность не является серьезной проблемой
- Вы собираетесь запускать это в локальной сети (локальной сети), а не через Интернет
Если это так, я бы предложил следующее:
-
Вы хорошо тестируете на своем локальном компьютере — соединение будет работать одинаково по любому протоколу на локальном или удаленном, и, учитывая небольшой объем данных в кампании D amp; D, вы, вероятно, не будете беспокоиться о производительности, даже если ваше приложение очень болтает с SQL server
-
Поместите информацию о вашем подключении в файл конфигурации приложения, это поддерживается в .NET framework с некоторыми вспомогательными типами, например
ConfigurationManager
, где вы можете получить доступ к строкам подключения следующим образом:
Конфигурационный файл:
<connectionStrings>
<add name="MyConnection" providerName="System.Data.SqlClient" connectionString="server=somehostname;database=Dungeons;uid=user;password=password" />
</connectionStrings>
c # код
string connectionString = ConfigurationManager.ConnectionStrings["MyConnection"];
Смотрите здесь для получения более подробной информации:
-
Поскольку ваши друзья, вероятно, не хотят связываться с вашим SQL server, и вы, вероятно, не подключены к домену Windows, я бы сказал, что вы согласны с вводом секретов (user / pass) в строку подключения в файле конфигурации
-
Я бы не стал беспокоиться о том, что я сказал о безопасности Windows — в основном пользователи на клиентских компьютерах будут использоваться в качестве учетных данных для базы данных SQL, это было бы немного сложнее настроить, если вы не все подключены к домену, а не просто встраиваете пользователя / пользователя SQL в базу данных SQL.конфигурация
** Редактировать: **
В дополнение к разговору, если вы пишете приложение, к которому клиенты будут получать доступ через Интернет, использование прямого SQL-соединения обычно не лучшая идея, но это может сработать, если вы можете управлять своими клиентами / IP-адресами.
Как правило, открытие вашего SQL server в Интернет просто требует атаки — и если ваш SQL server не обновлен, это может привести к компрометации хост-компьютера.
В лучшем случае это неудобство, но если вы используете эту машину для чего-либо, кроме данных D amp; D, то вы, вероятно, не хотите, чтобы кто-то копался в ней.
В случае, если вы не хотите изменять архитектуру своего приложения
Вы можете внести своих клиентов в белый список в SQL server / на брандмауэре. Поскольку это только друзья (скажем, 10-20 человек?), Вы можете управлять их IP-адресами без особых проблем.
Это не позволяет общему Интернету получить доступ к вашему серверу.
Вы также можете использовать VPN (либо программный, либо аппаратный, если ваш маршрутизатор поддерживает его). Это также приводит к тому, что ваши клиенты подключаются к вашей локальной сети по существу, устраняя необходимость в какой-либо конфигурации брандмауэра, кроме самой VPN.
В случае, если вы заинтересованы в изменении архитектуры вашего приложения
Вы можете использовать подход, основанный на услугах. Это то, что обычно используется для защиты веб-служб — .NET framework поддерживает это с помощью WCF (Windows Communication Foundation).
Это позволяет вам определять контракты на обслуживание, к которым может присоединиться ваш сервер / клиент.
Сам протокол / метод связи определяется с помощью конфигурации, поэтому вы можете изменить, какой механизм используется для связи между клиентом / сервером постфактум, без необходимости изменять код вашего приложения.
Однако для этого требуется, чтобы вы написали уровень обслуживания — вы не сможете напрямую обращаться к SQL со своего клиента, но это может быть полезным опытом обучения, особенно если вы заинтересованы в выполнении подобной работы в будущем.
Прочитайте о WCF здесь:
https://learn.microsoft.com/en-us/dotnet/framework/wcf/whats-wcf
Существует также подход, основанный на REST, который устанавливается на уровне HTTP, .NET framework может поддерживать это через ASP.NET веб-API.
https://dotnet.microsoft.com/apps/aspnet/apis
… короче говоря, есть несколько вариантов
Комментарии:
1. спасибо за ответ! В настоящее время я работаю с информацией, которую вы мне предоставили; однако есть одна вещь. Я буду использовать это приложение через Интернет с другими мастерами подземелий, а не по локальной сети. Это значительно меняет ситуацию? Например, мы не будем находиться в одном географическом местоположении или в одном интернет-соединении.
2. Да и нет — если вы действительно хотите это сделать, вы должны тщательно продумать, как вы предоставляете доступ к вашему SQL server. Если вы откроете порты и оставите SQL для прослушивания, есть вероятность, что кто-то будет сканировать порты и проверять их на наличие уязвимостей. В этом случае внесение клиентов в белый список по IP-адресу является хорошей идеей (Azure SQL, облачное решение, по сути, делает это). Без изменения вашего приложения для использования подхода, основанного на услугах, у вас не так много других вариантов. Подход, основанный на обслуживании, в основном защищает доступ к вашему SQL server, размещая ваш API в Интернете, а не весь ваш сервер. Является ли белый список опцией?
3. Я слышу ваши опасения по поводу безопасности. Этот проект — способ для меня узнать обо всех этих концепциях и применить их на практике в течение этого года. Похоже, что внесение в белый список будет необходимо в тот момент, когда приложение полностью заработает. Сейчас я просто пытаюсь добраться до стадии, когда я могу открыть приложение на другом компьютере и заставить его работать на 100% так же, как на моем.
4. Ну, тогда вы уже должны быть там в своей локальной сети, И он будет работать через глобальную сеть без особых проблем (брандмауэр и т. Д.). Просто будьте осторожны 🙂
5. Примечание: вы также можете использовать VPN, где ваши клиенты могут подключаться к вашей сети, как если бы они находились в локальной сети. Я не уверен, насколько сложно это настроить на домашней машине (не уверен, сколько существует программных VPN), но, конечно, если ваш сетевой комплект (т. Е. Маршрутизатор) Поддерживает VPN, вы можете использовать это. Это существенно устранило бы риски, поскольку ваши клиенты будут находиться в вашей локальной сети.