Россия, Казань, Казанский Национальный Исследовательский Технический Университет |
Чтение данных SQL Server через интернет
Настраиваем прослушивание определенных IP-адресов сервером SQL Server
Экземпляр SQL Server по умолчанию прослушивает порт TCP номер 1433. Именованные экземпляры SQL Server получают динамически назначаемый адрес порта TCP при загрузке экземпляра. Если нужно обеспечить доступ к экземпляру SQL Server через интернет, необходимо настроить прослушивание экземпляром конкретного порта, который не назначается динамически. Чтобы настроить прослушивание определенного порта TCP именованным экземпляром сервера, выполните следующие действия:
- Снова запустите SQL Server Configuration Manager (Диспетчер конфигурации SQL Server).
- В дереве в левой панели разверните узел Server Network Configuration (Сетевая конфигурация сервера), щелкнув на значке "плюс" (+) рядом с этим узлом. Выделите узел Protocols For (Протоколы для) <имя_экземпляра> для того экземпляра SQL Server, который нужно сконфигурировать:
- Выполните двойной щелчок на элементе TCP/IP, который отображается в правой панели.
- В окне TCP/IP Properties (Свойства: TCP/IP) перейдите на вкладку IP Addresses (IP-адреса), которая показана на рисунке:
- Обратите внимание на секцию IPAII в нижней части окна. Если свойство TCP Dynamic Ports (Динамические TCP-порты) содержит значение 0, то удалите 0 и оставьте свойство незаполненным. Затем измените свойство TCP Port (TCP-порт), задав определенный номер порта, который должен прослушивать сервер SQL Server:
Нажмите кнопку ОК. Диспетчер конфигурации SQL Server проинформирует вас о том, что изменения вступят в силу после перезапуска службы SQL Server.
Важно. Некоторые порты зарезервированы для определенных приложений. SQL Server не может прослушивать порт, если он используется другим приложением. Просмотрите списки Комитета по цифровым адресам в интернете (IANA), чтобы выяснить, какие номера портов не используются: http://www.iana.org/ assignments/port-numbers.
Направляем клиентские приложения по правильным IP-адресам и выполняем запросы
Заключительный этап в обеспечении соединения клиентских приложений с SQL Server через интернет по протоколу TCP/IP – это направление всех вызовов клиентских приложений на соответствующий сервер при помощи IP-адреса и номера порта, прослушиваемых сервером.
Строка соединения для указания имени сервера должна соответствовать такому формату:
Data Source=tcp:<ip_address>/instance,<port_number>; Initial Catalog=<database_name>; User ID=<user_id>; Password=<password>;
Пример корректной строки соединения в этом формате:
Data Source=tcp:190.190.200.100/Sales,1344; Initial Catalog=AdventureWorks; User ID=sa; Password=Pa$$w0rd;
![](prim.gif)
Следующий пример программного кода (который можно найти среди файлов примеров в папке ConnectThroughTCP-port) показывает, как открыть соединение с сервером SQL Server через интернет с использованием протокола TCP/IP и извлечь все записи о сотрудниках из базы данных Adventure Works. Чтобы использовать этот пример, нужно изменить фрагменты строки соединения, выделенные полужирным шрифтом так, чтобы они соответствовали вашей среде. Для обмена данными с сервером через интернет необходим публичный IP-адрес. Если передача данных осуществляется в интрасети, IP-адреса, выделенного серверу в этой сети, вполне достаточно. Используйте <номер_порта>, который был задан в разделе "Настраиваем прослушивание определенных IP-адресов сервером SQL Server".
![](sovet.gif)
![](prim.gif)
Public Sub GetEmployeeList() Dim connectionString As String connectionString = "Data Source=tcp:192.168.1.102,49152;" + _ "Initial Catalog=AdventureWorks; User ID=Mary; password=34TY$$543" Dim query As String query = "SELECT Person.Contact.FirstName + " " + " + _ "Person.Contact.LastName AS "Employees" " + _ "FROM Person.Contact " + _ "INNER JOIN HumanResources.Employee " + _ "ON Person.Contact.ContactID = HumanResources.Employee.ContactID" Using cn As New SqlClient.SqlConnection(connectionString) Using cmd As New SqlClient.SqlCommand(query, cn) cn.Open() Dim dr As SqlClient.SqlDataReader = cmd.ExecuteReader() While (dr.Read()) Console.WriteLine(dr(0)) End While End Using End Using End Sub
![](impotant.gif)
- Использование TCP/IP в качестве сетевого протокола.
- Прослушивание определенного порта IP.
Помимо этого необходимо сконфигурировать межсетевой экран или прокси-сервер вашей организации на разрешение доступа к SQL Server из внешних приложений.