Конфигурирование SQL Server для сетевого доступа.

 

Это очень простой материал вводного характера, который как-то понадобилось отразить со вспомогательной целью на одном из семинаров. Выкладываю его здесь из соображений: чего добру пропадать? Вдруг кому пригодится.

Есть SQL Server 2008 R2, свежеустановленный экземпляром по умолчанию на хост 192.168.0.1, c которым мы пытаемся соединиться с машины 192.168.0.2. Пусть слово Денали не смущает, т.к. в данном случае это никакой погоды не делает. Просто на 192.168.0.2 имеется пробная версия 11-го SQL Server, и SSMS от него я воспользовался, чтобы законнектиться к 192.168.0.1. С тем же успехом можно было использовать Excel, Access,написать скрипт на PowerShell и т.д.

clip_image001

Рис.1

К сожалению, соединение не желает устанавливаться:

clip_image002

Рис.2

В сообщении об ошибке замечаем, что при установлении соединения по умолчанию использовалась сетевая библиотека Named Pipes в то время, как мы пытались соединиться по IP-адресу. Давайте принудительно скажем:

clip_image003

Рис.3

Префикс tcp: означает использовать сетевую библиотеку TCP/IP. Это все равно, как если бы мы написали dbmssocn в строке соединения или кликнули на кнопку Options >> и выбрали TCP/IP из списка сетевых библиотек:

clip_image004

Рис.4

Мы даже в явном виде указали ему порт 1433. Это порт, по которому по умолчанию слушает дефолтный инстанс SQL Server. Порт в явном виде указывается, если на 192.168.0.1 не запущена служба SQL Server Browser. Она там действительно не запущена, но в случае дефолтного экземпляра это некритично. Если экземпляр SQL Server, с которым мы хотим соединиться, является экземпляром по умолчанию (дефолтным) и порт на нем принудительно не менялся, порт в строке соединения тоже можно не указывать, т.к. оно автоматически пойдет на ТСР1433. По-скромному сошлюсь на свой давнишний пост на MSDNе «Ограничение на клиентский IP» (читать после фразы «Затея с файрволом, на мой взгляд, выглядит негибко потому...»). В этом также можно убедиться, включив журналирование на файрволе подобно тому, как мы проделывали это в посте «Как удаленно обнаружить экземпляры SQL Server на машине? Часть I» (читать после фразы «Осталось понять, чего ему еще не хватат до полного щастя»). Но до файрвола мы еще доберемся, а пока снова получаем отлуп, на этот раз уже по TCP/IP:

clip_image005

Рис.5

Можно убедиться, что 192.168.0.1 пингуется со 192.168.0.2:

clip_image006

Рис.6

что сервис MSSQLSERVER на 192.168.0.1 (Start -> Run -> services.msc) стартован:

image

Рис.7

что он работает не под Local Service / System, а под нормальной учетной записью, протереть фары, попинать колеса. Ошибка возникает из-за того, что на свежеустановленном SQL Servere 192.168.0.1 из протоколов по соображениям безопасности доступен только Shared Memory. Чтобы включить поддержку сетевых библиотек, позволяющих прицепиться к SQL Server извне пределов данной конкретной машины, жмем кнопку Start, выбираем All Programs -> Microsoft SQL Server 2008 R2 -> Configuration Tools -> SQL Server Configuration Manager. Слева становимся на SQL Server Network Configuration \ Protocols for <имя экземпляра>. Для удаленного доступа с других компов включаем поддержку протоколов Named Pipes и TCP/IP.

clip_image009

Рис.8

Перестартуем экземпляр SQL Server 192.168.0.1, чтобы сделанные настройки вступили в силу, повторяем попытку установить соединение со 192.168.0.2 (Рис.3) и вновь безрезультатно (Рис.5). Эта ошибка возникает из-за того, что я забыл открыть дырку для SQL Server на файрволе 192.168.0.1. Вызываем Start -> Run -> WF.exe и создаем новое Inbound Rule, как описано в статье в BOL. Либо напишите команду типа

netsh advfirewall firewall add rule name="SQL Srv_Open static 1433" dir=in action=allow protocol=TCP localport=1433 enable=yes profile=ANY remoteip=192.168.0.2 interfacetype=lan

Скрипт 1

Теперь соединение успешно установится:

clip_image010

Рис.9

При установке дополнительных экземпляров SQL Server, дополнительных служб, таких, как Analysis Services, Reporting Services, Integration Services, а также использовании дополнительной функциональности Database Engine, такой, как веб-службы, сервис-брокер, зеркалирование базы, репликация по FTP или синхронизация посредством механизмов общего доступа к файлам, на файрволе потребуется открыть дополнительные порты аналогично тому, как это делалось для 1433 в Скрипте 1. Список портов, использующихся компонентами SQL Server, для справки приведен в BOL «Настройка Брандмауэра Windows для разрешения доступа к SQL Server»:

Порты, используемые компонентом DatabaseEngine

В следующей таблице перечислены порты, обычно используемые компонентом Database Engine.

Сценарий

Порт

Комментарии

Экземпляр SQL Server по умолчанию, работающий по протоколу TCP

TCP-порт 1433

Этот порт открывают в брандмауэре чаще всего. Он применяется для программных соединений с экземпляром компонента Database Engine по умолчанию или именованным экземпляром, который является единственным на данном компьютере (для именованных экземпляров следует учитывать ряд особых требований, подробнее о которых см. в подразделе Динамические порты далее в этом разделе).

Именованные экземпляры SQL Server в конфигурации по умолчанию

TCP-порт выделяется динамически в момент запуска компонента Database Engine.

См. подраздел Динамические порты далее в этом разделе. При использовании именованных экземпляров службе браузера SQL Server может потребоваться UDP-порт 1434.

Именованные экземпляры SQL Server, если они настроены для использования фиксированного порта

Номер порта настраивается администратором.

См. подраздел Динамические порты далее в этом разделе.

Выделенное административное соединение

TCP-порт 1434 предназначен для экземпляра по умолчанию. Другие порты используются для именованных экземпляров. Номер порта проверьте по журналу ошибок.

По умолчанию удаленные соединения по выделенному административному соединению (DAC) запрещены. Разрешить удаленное выделенное административное соединение можно при помощи средства настройки контактной зоны. Дополнительные сведения см. в разделе Основные сведения о настройке контактной зоны.

Служба «SQL Server, браузер»

UDP-порт 1434

Служба «SQL Server, браузер» прослушивает входящие соединения к именованному экземпляру и возвращает клиенту номер TCP-порта, соответствующего именованному экземпляру. Обычно служба «SQL Server, браузер» запускается при использовании именованного экземпляра компонента Database Engine. Если клиент настроен для соединения с именованным экземпляром по заданному порту, то службу «SQL Server, браузер» запускать не обязательно.

Экземпляр SQL Server, работающий через конечную точку HTTP

Может указываться во время создания конечной точки HTTP. По умолчанию используется TCP-порт 80 для данных CLEAR_PORT и порт 443 для данных SSL_PORT.

Используется для HTTP-соединения по URL-адресу.

Экземпляр SQL Server по умолчанию, работающий через конечную точку HTTPS

TCP-порт 443

Используется для HTTPS-соединения по URL-адресу. HTTPS представляет собой HTTP-соединение, защищенное по протоколу SSL.

Service Broker

TCP-порт 4022. Чтобы проверить используемый порт, выполните следующий запрос:

SELECT name, protocol_desc, port, state_desc

FROM sys.tcp_endpoints

WHERE type_desc = 'SERVICE_BROKER'

Для компонента SQL ServerService Broker нет порта по умолчанию, но эта конфигурация принята в электронной документации для использования в примерах.

Зеркальное отображение базы данных

Порт, выбранный администратором. Чтобы определить порт, выполните следующий запрос.

SELECT name, protocol_desc, port, state_desc FROM sys.tcp_endpoints

WHERE type_desc = 'DATABASE_MIRRORING'

Для зеркального отображения базы данных нет порта по умолчанию, однако в электронной документации в примерах используется TCP-порт 7022. Очень важно избегать прерывания используемой конечной точки зеркального отображения, особенно в режиме высокой безопасности с автоматическим переходом на другой ресурс. Конфигурация брандмауэра должна избегать прерывания кворума. Дополнительные сведения см. в разделе Указание сетевого адреса сервера для зеркального отображения базы данных.

Репликация

Соединения с SQL Server для репликации используют порты, которые обычно использует компонент Database Engine (TCP-порт 1433 для экземпляра по умолчанию и т. д.)

Веб-синхронизация и доступ через FTP/UNC к моментальному снимку репликации потребуют открытия в брандмауэре других портов. Передачу начальных данных и схемы из одного места в другое репликация осуществляет по протоколу FTP (TCP-порт 21) либо с помощью синхронизации через HTTP (TCP-порт 80) или общего доступа к файлам и принтерам (TCP-порты 137,138 и 139).

Для синхронизации по протоколу HTTP репликация использует конечную точку служб IIS (номер порта можно настроить, по умолчанию используется порт 80), однако процесс служб IIS соединяется с базой данных SQL Server через стандартный порт (1433 для экземпляра по умолчанию).

При веб-синхронизации через FTP-порт передача данных выполняется между службами IIS и издателем SQL Server, а не между подписчиком и службами IIS.

Дополнительные сведения см. в разделе Настройка Microsoft Internet Security and Acceleration Server для репликации Microsoft SQL Server 2000 через Интернет.

Отладчик Transact-SQL

TCP-порт 135

См. раздел Особые замечания относительно порта 135

Также может потребоваться исключение IPsec.

При использовании среды Visual Studio на сервере в список исключений необходимо также добавить программу Devenv . exe и открыть TCP-порт 135.

При использовании среды Management Studio на сервере необходимо также добавить в список исключений программу ssms . exe и открыть TCP-порт 135. Дополнительные сведения см. в разделе Настройка отладчика Transact-SQL.

Динамические порты

По умолчанию именованные экземпляры (включая SQL Server Express) используют динамические порты. Это означает, что при каждом запуске компонент Database Engine находит доступный порт и занимает его. Если именованный экземпляр является единственным установленным экземпляром компонента Database Engine, то, скорее всего, он будет использовать TCP-порт 1433. При установке других экземпляров компонента Database Engine они будут использовать другие TCP-порты. Поскольку выбираемый порт может меняться при каждом запуске компонента Database Engine, настроить брандмауэр для разрешения доступа к нужному порту сложно. Поэтому, если используется брандмауэр, рекомендуется настроить компонент Database Engine на постоянное использование одного и того же порта. Такой порт называется фиксированным или статическим. Дополнительные сведения см. в разделе Configuring a Fixed Port.

В качестве альтернативы настройке именованного экземпляра на прослушивание фиксированного порта можно создать в брандмауэре исключения для программы SQL Server (например sqlservr . exe для компонента Database Engine). Это хороший выход, однако номер порта не будет отображаться в столбце Локальный порт на странице Правила для входящих подключений оснастки «Брандмауэр Windows в режиме повышенной безопасности». В результате аудит открытых портов станет сложнее. Еще один нюанс заключается в том, что при применении совокупного обновления или пакета обновления может измениться путь к исполняемому файлу SQL Server, что сделает правило брандмауэра недействительным.

Порты, используемые службами AnalysisServices

Компонент

Порт

Комментарии

Службы Analysis Services

TCP-порт 2383 для экземпляра по умолчанию

Стандартный порт для экземпляра служб Службы Analysis Services по умолчанию.

Служба «SQL Server, браузер»

Для именованного экземпляра служб Службы Analysis Services необходим только TCP-порт 2382

Запросы клиентского соединения к именованному экземпляру служб Службы Analysis Services, в которых не указан номер порта, направляются на порт 2382, который прослушивает служба «SQL Server, браузер». Браузер SQL Server затем перенаправляет запрос на порт, используемый запрошенным именованным экземпляром.

Службы Службы Analysis Services настроены для работы через протокол IIS/HTTP

(служба PivotTable® Service использует протокол HTTP или HTTPS)

TCP-порт 80

Используется для HTTP-соединения по URL-адресу.

Службы Службы Analysis Services настроены для работы через протокол IIS/HTTPS

(служба PivotTable® Service использует протокол HTTP или HTTPS)

TCP-порт 443

Используется для HTTPS-соединения по URL-адресу. HTTPS представляет собой HTTP-соединение, защищенное по протоколу SSL.

Если пользователи производят доступ к службам Службы Analysis Services через Интернет и службы IIS, необходимо открыть порт, который прослушивают службы IIS, и указать этот порт в строке соединения клиента. В этом случае необязательно иметь открытые порты для прямого доступа к службам Службы Analysis Services. Необходимо ограничить доступ к порту по умолчанию 2389, порту 2382 и другим портам, которые не нужны для осуществления доступа.

Пошаговые инструкции по настройке брандмауэра Windows для служб Службы Analysis Services см. в разделе Как настроить брандмауэр Windows для доступа к службам Analysis Services.

Порты, используемые службами ReportingServices

Компонент

Порт

Комментарии

Веб-службы Службы Reporting Services

TCP-порт 80

Используется для HTTP-соединения со службами Службы Reporting Services по URL-адресу. Не рекомендуется использовать стандартное правило Службы Интернета ( HTTP ) . Дополнительные сведения см. в разделе Взаимодействие с другими правилами брандмауэра ниже.

Службы Службы Reporting Services настроены для работы через протокол HTTPS

TCP-порт 443

Используется для HTTPS-соединения по URL-адресу. HTTPS представляет собой HTTP-соединение, защищенное по протоколу SSL. Не рекомендуется использовать стандартное правило Защищенные службы Интернета ( HTTPS ) . Дополнительные сведения см. в разделе Взаимодействие с другими правилами брандмауэра ниже.

Порты, используемые службами Integration Services

Компонент

Порт

Комментарии

Удаленный вызов процедур (Майкрософт) (MS RPC)

Используется средой выполнения служб Integration Services.

TCP-порт 135

См. раздел Особые замечания относительно порта 135

Служба Integration Services обращается к DCOM по порту 135. Диспетчер управления службами использует порт 135 для запуска и остановки службы Integration Services, передачи управляющих запросов запущенной службе и выполнения других задач. Номер порта не может быть изменен.

Это единственный порт, который должен быть открыт при соединении с удаленным экземпляром службы Integration Services из среды Management Studio или прикладной программы.

Другие порты и службы

Сценарий

Порт

Комментарии

Инструментарий управления Windows (WMI)

Дополнительные сведения о WMI см. в разделе Основные понятия о поставщике WMI для управления конфигурацией

Инструментарий WMI запускается в составе общего узла службы с назначением портов через DCOM. Инструментарий WMI может пользовать TCP-порт 135.

См. раздел Особые замечания относительно порта 135

Диспетчер конфигурации SQL Server использует инструментарий WMI для просмотра и управления службами. Рекомендуется использовать стандартную группу правил Инструментарий управления Windows (WMI). Дополнительные сведения см. в разделе Взаимодействие с другими правилами брандмауэра ниже.

Координатор распределенных транзакций (Майкрософт) (MS DTC)

TCP-порт 135

См. раздел Особые замечания относительно порта 135

Если приложение использует распределенные транзакции, то может потребоваться настройка брандмауэра таким образом, чтобы разрешить передачу данных координатора распределенных транзакций (Майкрософт) (MS DTC) между отдельными экземплярами MS DTC и между MS DTC и диспетчерами ресурсов (например SQL Server). Рекомендуется использовать стандартную группу правил Координатор распределенных транзакций.

Если для всего кластера настроен единственный общий координатор MS DTC в отдельной группе ресурсов, следует добавить программу sqlservr.exe в список исключений брандмауэра.

Кнопка обзора в среде Management Studio соединяется со службой SQL Server, браузер по протоколу UDP. Дополнительные сведения см. в разделе Служба браузера SQL Server.

UDP-порт 1434

Протокол UDP не сохраняет соединения.

Свойство UnicastResponsesToMulticastBroadcastDisabled интерфейса INetFwProfile управляет работой брандмауэра по отношению к одноадресным ответам на широковещательные (или многоадресные) UDP-запросы. Возможны два варианта.

· Если этот параметр имеет значение TRUE, то одноадресные ответы на широковещательные запросы запрещены. Перечисление служб завершится ошибкой.

· Если этот параметр имеет значение FALSE (по умолчанию), то одноадресные ответы разрешены в течение 3 секунд. Время ожидания не настраивается. Если сеть переполнена, каналы имеют задержки или сервер работает в режиме высокой нагрузки, то при построении списка экземпляров SQL Server список может быть возвращен лишь частично и ввести пользователя в заблуждение.

Трафик по протоколу IPsec

UDP-порты 500 и 4500

Если политика домена требует выполнения сетевых соединения через протокол IPsec, необходимо добавить в список исключений UDP-порты 4500 и 500. Протокол IPsec можно включить при помощи мастера создания правила для нового входящего подключения в оснастке «Брандмауэр Windows». Дополнительные сведения см. в разделе Использование оснастки «Брандмауэр Windows в режиме повышенной безопасности» ниже.

Использование проверки подлинности Windows в надежных доменах

Брандмауэр можно настроить для разрешения запросов проверки подлинности.

Дополнительные сведения см. в разделе Настройка брандмауэра для работы с доменами и отношениями доверия.

SQL Server и кластеризация Windows

Кластеризация требует открытия дополнительных портов, не связанных с SQL Server напрямую.

Дополнительные сведения см. в разделе Подготовка сети для работы кластера.

Пространства имен URL-адресов, зарезервированные в компоненте HTTP.SYS

Обычно TCP-порт 80, однако можно настроить для использования любого другого порта. Общие сведения см. в разделе Настройка протоколов HTTP и HTTPS.

Сведения о резервировании конечной точки компонента HTTP.SYS при помощи программы HttpCfg.exe, относящиеся к SQL Server, см. в разделе Резервирование пространств имен URL-адресов при помощи Http.sys.

clip_image011Особые замечания относительно порта 135

При использовании в качестве транспортного протокола RPC через TCP/IP или UDP/IP входящие порты для системных служб часто выделяются динамически с номерами выше 1024. Иногда их называют «случайными RPC-портами». В этом случае RPC-клиент определяет порт, назначенный серверу, через модуль конечной точки RPC. Для некоторых служб, работающих через протокол RPC, можно настроить использование определенного фиксированного порта. Можно также ограничить диапазон портов, которые могут быть динамически назначены службой RPC независимо от службы. Поскольку порт 135 используется для многих служб, он часто подвергается атакам злоумышленников. В случае открытия порта 135 рекомендуется ограничить область действия правила брандмауэра.

Получение списка прослушиваемых TCP/IP-портов

1. В командной строке введите netstat -n -a.

При наличии параметра - n программа netstat отображает в числовом виде адреса и номера портов активных соединений TCP. При наличии параметра - a программа netstat отображает порты TCP и UDP, прослушивание которых осуществляет компьютер.

2. Программу PortQry можно использовать для вывода состояния TCP/IP-портов (прослушивается, не прослушивается, фильтруется). В состоянии фильтрации порт может либо прослушиваться, либо не прослушиваться. Это состояние указывает, что программа не получила ответа от порта. Программу PortQry можно загрузить из Центра загрузки Майкрософт.

Продолжение следует.

 

 

Алексей Шуленин