Подключение к БД на другом компьютере (MS sql)
Привет, подскажите мне в такой ситуации. Я написал прогу с БД, базу создал в ms sql server 2012 management studio. Подключаюсь таким путём «Data Source=DESKTOP-V83JMKE\SQLEXPRESS;Initial Catalog=DfPhotoalbumDb;Integrated Security=True»;
Как мне теперь установить программу другому пользователю? Я так полагаю у пользователя тоже должен быть установлен sql server 2012, теперь скажите, какие нужны файлы для установщика, exe и БД само собой, но где этот БД расположен и как его установить и подключить у пользователя. Я не очень могу понять эту часть операции, подскажите пожалуйста, заранее спасибо)
94731 / 64177 / 26122
Делаем доступной базу данных для удаленного подключения
Начнем с того что бывают случаи, когда нужно делать приложение с подключением к базе данных. Это делается для того чтобы особо не копаться в бэкэнд разработке и сконцентрироваться на фронтэнде из-за нехватки рук и навыков. Я не берусь говорить, что мое решение будет безопасным, но оно работает.
Поскольку я не люблю платить за хостинг, я воспользовался сетью на своей работе, там есть белый IP. Вот ее структура:

У меня имеется доступ к нескольким компьютерам точнее к 192.168.1.2 (он же 192.168.0.2) там стоит Linux и к 192.168.0.3 с Windows. В общем, для своего приложения я выбрал mysql и посмотрел что есть на Linux. Там уже был установлен он, но пароль никто не знает, а те кто знали забыли (те кто работал до меня). Узнав что он никому не нужен, я его удалил и попытался установить заново. Память не хватало и поскольку чтобы исправить эту ошибку пришлось бы подключать к нему монитор и клавиатуру с мышью, я решил бросить это дело. Тем более что машина с Windows куда мощней и плюс ко всему у меня у самого стоит она на ноутбуке домашнем. В принципе саму установку я описывать не буду, есть куча мануалов и видео про это. Установив mysql на Windows машину, я решил сделать бэкап таблиц с ноутбука на рабочую станцию.
Делается это так (в моем случае):
mysqldump -uroot -p your_base > dump_file.sql
Далее в новой базе данных создаем базу данных и восстанавливаем бэкап на «новой» машине.
mysql -h localhost -u root -p
create database your_base; use your_base;
mysql -uroot -p your_base < dump_file.sql
show tables;
Файл с бэкапом надо на новую машину положить и возможно если не в директории с утилитой то полный путь к ней. (Я просто залил бэкап на гитхаб и клонировал его на новую машину). Я бы добавил как создаются сами таблицы, но не сохранил скрины, да и думаю это не сложно даже студенту 2-3 курса.
Когда восстановил все таблицы, пришло время сделать доступным удаленный доступ к бд. В общем, такие команды к успеху не привели (выдал только право на чтение select)
create user 'client'@'%' IDENTIFIED by 'client'; grant select on your_base . * to 'client'@'%'; flush privileges;
Точнее я мог подключится к базе только командой,
mysql -h localhost -u client -pclient
а такой уже не мог
mysql -h 192.168.0.3 -u client -pclient
мне это не подходило также не мог подключится через этот адрес и от root.
Помогла программка mysql workbench там в настройках меняете localhost на % и работает, хотя client это не помогло. Теперь вы можете подключаться к бд из консоли или из кода с любого адреса.

Еще нужно сделать сеть домашней или предприятия и выключить брандмауэр Windows иначе не сможете даже сделать пинг этой машины(не то чтобы подключится к бд).
Пол дела сделано, дальше нужно чтобы я мог из дома подключится к базе данных.
Как видно из схемы сети, то до интернета надо пройти путь от 192.168.0.3 до 192.168.1.1 (роутер) пойдем в обратную сторону. Настроим маршрут от 192.168.1.1 до 192.168.1.2 вот таким образом:

В общем, картинку не показывает — напишу руками:
route add 192.168.0.0 mask 255.255.255.0 gateway 192.168.1.2
Это можно сделать только в одной подсети то есть нельзя сразу пробросить на адрес 192.168.0.2 или 192.168.0.3
Это нужно чтобы роутер знал где находится подсеть 192.168.0.0/24 (учите основы сетей это полезно).
Теперь добавляем проброс порта 3306 (порт mysql по дефолту (если вы его при установки только не поменяли)) на адрес 192.168.1.2

Вот осталось сделать самое сложное это сделать форвардинг на линукс машине(на ней две сетевые карточки 192.168.1.2 (интерфейс enp3s1) и 192.168.0.2(интерфейс enp3s0) чтобы сетевухи знали что перебросить их с 192.168.1.2 на 192.168.0.2, а потом на нашу Windows машину с MySql.
sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -p tcp --syn --dport 3306 -m conntrack --ctstate NEW -j ACCEPT sudo iptables -A FORWARD -i enp3s1 -o enp3s0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -A FORWARD -i enp3s0 -o enp3s1 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT sudo iptables -t nat -A PREROUTING -i enp3s1 -p tcp --dport 3306 -j DNAT --to-destination 192.168.0.3 sudo iptables -t nat -A POSTROUTING -o enp3s0 -p tcp --dport 3306 -d 192.168.0.3 -j SNAT --to-source 192.168.1.2 и последняя строчка сохраняет введенные команды чтобы они при перезапуске оси не стерлись sudo service iptables-persistent save
Т.е. 1я строчка значит что мы принимаем первое соединение, 2-я и 3-я что можно в обе стороны пускать пакеты, 4-я и 5-я значит замену адреса назначения и источника. И вуаля можно коннектиться из дома через mysql. И напоследок мой код на с++ который это делает:
//DataBaseConnection.cpp #include "DataBaseConnection.h" DataBaseConnection::DataBaseConnection() < >void DataBaseConnection::Connect() < // Получаем дескриптор соединения conn = mysql_init(NULL); if (conn == NULL) < // Если дескриптор не получен – выводим сообщение об ошибке fprintf(stderr, "Error: can'tcreate MySQL-descriptor\n"); //exit(1); //Если используется оконное приложение >// Подключаемся к серверу if (!mysql_real_connect(conn, "192.168.0.3", "root", "password", "your_base", NULL, NULL, 0)) < // Если нет возможности установить соединение с сервером // базы данных выводим сообщение об ошибке fprintf(stderr, "Error: can't connect to database: %s\n", mysql_error(conn)); >else < // Если соединение успешно установлено выводим фразу - "Success!" fprintf(stdout, "Success!\n"); >> std::vector DataBaseConnection::Query() < vectordrum.clear(); std::string query = "SELECT * FROM drum where char * q = query.c_str(); qstate = mysql_query(conn, q); if (!qstate) < res = mysql_store_result(conn); while (row = mysql_fetch_row(res)) < //printf("ID: %s,Position: %s, Image: %s\n", row[0], row[1], row[2]); vectordrum.push_back(row[2]); >> else < std::cout return vectordrum; > void DataBaseConnection::Close() < // Закрываем соединение с сервером базы данных mysql_close(conn); >DataBaseConnection::~DataBaseConnection() < vectordrum.clear(); >//DataBaseConnection.h #pragma once #include #include #include #pragma comment(lib,"mysqlcppconn.lib") #pragma comment(lib,"libmysql.lib") class DataBaseConnection < public: DataBaseConnection(); void Connect(); std::vectorQuery(); void Close(); ~DataBaseConnection(); MYSQL *conn; MYSQL_ROW row; MYSQL_RES *res; int qstate; std::vector vectordrum; >;
Теперь можно смело скидывать эту программу кому угодно, и не надо переписывать чтобы она работала локально.
Как удаленно подключиться к MySQL

Подключаться к базам данных можно разными способами. Подключение, устанавливаемое с сервера, называется локальным. С помощью такого типа подключения можно работать с домашнего компьютера, при этом используя любые удобные приложения по управлению базами данных.
Я расскажу, как подключиться к удаленной базе данных MySQL, какие существуют способы, а также опишу некоторые типичные ошибки.
Подключение через панель управления TimeWeb
Чтобы подключиться удаленно к MySQL, необходимо для начала открыть сайт хостинга и авторизоваться в личном кабинете. В панели управления следует выбрать раздел «Базы данных MySQL», через него и будем проводить операции. В новом открывшемся окне находим ссылку «Добавить доступ» напротив того сервера, к которому планируется подключиться. Для разрешения доступа к подсети /24 меняем последний актет IP-адреса на знак %.
При установлении соединения используем имя сервера или его IP-адрес. Данная информация доступна на главной странице в разделе «Информация о сервере». Порт указываем 3306, имя пользователя будет тем же, что и название базы данных. Вводим пароль и устанавливаем соединение.
phpMyAdmin
phpMyAdmin – программное средство, предоставляющее веб-интерфейс для работы с сервером MySQL. Подключиться к базе можно, открыв раздел «Базы данных MySQL» в панели управления хостингом. Находим на странице ссылку «phpMyAdmin» и жмем по ней для подключения. Если она недоступна, значит, пользователем был превышен лимит доступных БД. Увеличить его можно сменой тарифа.
Входим в данный раздел, вбиваем все данные и подключаемся.
Комьюнити теперь в Телеграм
Подпишитесь и будьте в курсе последних IT-новостей
Соединение через SSH туннель
Данный тип подключения считается более безопасным, потому что все данные по SSH-туннелю передаются в зашифрованном виде, исключая возможность перехвата.
Подключение в Windows
В данной ОС соединение по SSH протоколу можно осуществить с помощью специальных программ для управления базами данных. Например, PuTTY (бесплатная программа) или SecureCRT (платное ПО, но с пробной версией на 30 дней).
Мы для работы выбрали PuTTY. Скачиваем установщик с официального сайта и устанавливаем приложение . Запускаем программу, затем переходим в раздел «Session». В поле «Host Name» вводим свой домен или указываем его IP-адрес.

Далее переходим в категорию «Connection», открываем вкладку «SSH», затем «Tunnels». В поле «Source Port» указываем значение 3306, в «Destination» вбиваем localhost:3306, потом жмем на кнопку «Add» для добавления порта в список. И только потом жмем кнопку «Open» для установления соединения с хостом.

Логин и пароль те же самые, которые используются для входа в панель управления. При подключении используем имя пользователя и пароль, выданные при создании базы данных. Адрес сервера - 127.0.0.1, порт для подключения 3306.
Предупреждаем, что если вы уже устанавливали сервер баз данных MySQL на своем компьютере, то соединение через порт 3306 будет недоступно. Надо будет указать другое значение, например 3307.
Подключение в Linux
В ОС Linux никакого дополнительного ПО устанавливать не придется, можно все провести через командную строку «Терминал». Перед тем как подключиться к MySQL удаленно, нужно создать SSH-туннель. Вводим вот такую команду:
ssh -L3306:localhost:3306 -n логин@site.com
Потом в конфигурационном файле MySQL потребуется изменить параметр, отвечающий за удаленное подключение. Открываем в «Терминале» файл, дав вот такую команду:
sudo nano /etc/mysql/my.cnf
Далее комментируем нужную нам строку. В итоге она должна выглядеть вот таким образом:
# bind-address = 127.0.0.1
Сохраняем изменения, потом перезапускаем MySQL вот такой командой:
sudo service mysql restart
Далее будет запрошен пароль для входа в панель управления хостингом, вводим его. Для подключения к удаленному серверу MySQL необходимо создать пользователя, и делается это вот такой командой:
GRANT ALL ON *.* TO имя_пользователя@127.0.0.1 IDENTIFIED BY 'пароль'
Так мы создадим пользователя с неограниченным доступом ко всем базам на указанном сервере. Потом проверяем подключение утилитой telnet. Если сервер запрос не отклонил, значит, пора приступать к подключению. Для этого можно задать команды вот таких типов:
mysql -u имя_пользователя –h 127.0.0.1 –p mysql -h наименование_хоста -u dbUser -p dbName

Как проверить соединение с базой данных MySQL
Для проверки подключения к базе данных MySQL во всех ОС используем утилиту telnet. Нужно просто открыть командную строку и набрать в ней вот такую команду:
telnet 127.0.0.1 3306
Если соединение установится, то настройка туннеля прошла успешно, можно приступать к подключению. Если нет, рекомендуем тщательно проверить все настройки.
Как обеспечить работу с SQL на другом компьютере?
Написал программу на своем компьютере. Программа работает с SQL. Но хочу эту программу установить на комп своего друга, а там она выдает ощибку о том что не возможно обратиться к SQL. Обязательно теперь другу SQL Server установить?
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Подключение к БД на другом компьютере (MS sql)
Привет, подскажите мне в такой ситуации. Я написал прогу с БД, базу создал в ms sql server 2012.
Как подключиться к MS SQL SERVER 2012 с MS Server management на другом компьютере?
Уже чего только не пробовал.. 1433 порт закрыт, с моего пк не хочет подключатся к VDS Что делать? .
Источник данных не работает на другом компьютере. MS SQL
Я добавил в форму новый источник данных. На том компьютере, на котором я его добавил, всё работает.
Заблокирован
Да обязательно если вы обращаетесь к localhost / 127.0.0.1
Или же вы можете настроить доступ к своей базе данных если у вас на компьютере имеется выделенный Ip.
Регистрация: 18.06.2014
Сообщений: 43
Просто перейдите на MySQL. Создайте БД на хостинге и почитайте мануал по работе с MySQL и C#.
Все довольно просто - то же ADO.NET просто названия классов у библиотеки начинается не с SQL а MySQL.
Технологии тянуться к вэб. Настольное ПО уже потеряло свой смысл и цель.
Вот ссылка на dll MySQL - http://dev.mysql.com/downloads. t/5.2.html
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь
Не работает база данных SQL на другом компьютере
Сделал программу, у неё есть подключение к базе данных sql и от туда берет данные. У меня есть 3.
Как программно открывать порт на одном компьютере и слушать и видеть что он открыт на другом компьютере
Ребят подскажите как программно открывать порт на одном компьютере и слушать и видеть что он открыт.
Не запускается приложение, которое содержит БД SQL Server, на другом компьютере
Приложение C# связан с БД SQL Server. На моем компьютере он хорошо работает, без никаких проблем.
Как обеспечить лучший интерфейс для своей программы на любом компьютере?
Здравствуйте 🙂 Дело в том что на разных компьютерах стоит разная винда, соответственно на разных.

Как обеспечить работу Timer в BackGroundWorker
Подскажите как сделать так чтобы в BackGroundWorker'e работал таймер?
Как запустить и обеспечить полноценную работу QBasic в Windows?
как запустить и обеспечить полноценную работу q basic в windows. Если это возможно. у самого - в.