Опубликован: 29.07.2008 | Доступ: свободный | Студентов: 1264 / 144 | Оценка: 4.49 / 4.15 | Длительность: 17:53:00
Лекция 5:

Чтение данных SQL Server через интернет

Настраиваем прослушивание определенных IP-адресов сервером SQL Server

Экземпляр SQL Server по умолчанию прослушивает порт TCP номер 1433. Именованные экземпляры SQL Server получают динамически назначаемый адрес порта TCP при загрузке экземпляра. Если нужно обеспечить доступ к экземпляру SQL Server через интернет, необходимо настроить прослушивание экземпляром конкретного порта, который не назначается динамически. Чтобы настроить прослушивание определенного порта TCP именованным экземпляром сервера, выполните следующие действия:

  1. Снова запустите SQL Server Configuration Manager (Диспетчер конфигурации SQL Server).
  2. В дереве в левой панели разверните узел Server Network Configuration (Сетевая конфигурация сервера), щелкнув на значке "плюс" (+) рядом с этим узлом. Выделите узел Protocols For (Протоколы для) <имя_экземпляра> для того экземпляра SQL Server, который нужно сконфигурировать:
  3. Выполните двойной щелчок на элементе TCP/IP, который отображается в правой панели.
  4. В окне TCP/IP Properties (Свойства: TCP/IP) перейдите на вкладку IP Addresses (IP-адреса), которая показана на рисунке:

  5. Обратите внимание на секцию 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;
Примечание. Если соединение устанавливается с экземпляром по умолчанию, указывать имя экземпляра не нужно.

Следующий пример программного кода (который можно найти среди файлов примеров в папке ConnectThroughTCP-port) показывает, как открыть соединение с сервером SQL Server через интернет с использованием протокола TCP/IP и извлечь все записи о сотрудниках из базы данных Adventure Works. Чтобы использовать этот пример, нужно изменить фрагменты строки соединения, выделенные полужирным шрифтом так, чтобы они соответствовали вашей среде. Для обмена данными с сервером через интернет необходим публичный IP-адрес. Если передача данных осуществляется в интрасети, IP-адреса, выделенного серверу в этой сети, вполне достаточно. Используйте <номер_порта>, который был задан в разделе "Настраиваем прослушивание определенных IP-адресов сервером SQL Server".

Совет. Чтобы установить соединение с сервером SQL Server с помощью имени пользователя и пароля, следует настроить SQL Server на использование комбинированного режима проверки подлинности (SQL Server + Windows). Дополнительную информацию об этом режиме проверки подлинности можно найти в лекции 2-3 "Разработка и защита баз данных в Microsoft SQL Server 2005". На момент написания этой лекции SQL Server не признавал учетные данные Windows, если при подключении по протоколу TCP использовался параметр Integrated Security = true, поскольку TCP/IP не является протоколом аутентификации. Это означает, что соединения не аутентифицируются при использовании учетных данных Windows. Чтобы пройти проверку подлинности, следует использовать идентификатор SQL и указать в строке соединения имя пользователя и пароль.
Примечание. Чтобы узнать IP-адрес компьютера, выберите в меню Start (Пуск) команду Run (Выполнить). Введите в диалоговом окне Run (Выполнить) команду cmd и нажмите кнопку ОК. Откроется окно командной строки. В строке приглашения введите команду ipconfig и нажмите клавишу Enter. Вы увидите IP-адрес компьютера. Введите команду exit и нажмите клавишу Enter, чтобы закрыть окно командной строки.
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
Важно. Выполнив описанные выше действия, вы настроили сервер SQL Server на выполнение следующих действий:
  1. Использование TCP/IP в качестве сетевого протокола.
  2. Прослушивание определенного порта IP.

Помимо этого необходимо сконфигурировать межсетевой экран или прокси-сервер вашей организации на разрешение доступа к SQL Server из внешних приложений.