Сетевые протоколы и конечные точки потока табличных данных

Взаимодействие компонента SQL Server Database Engine с приложением осуществляется в формате обмена данными Майкрософт, который называется пакетом потока табличных данных. Уровень протокола сетевого адаптера SQL Server, который замещает компоненты сетевых библиотек Net-Library для SQL Server 2000 и компоненты доступа к данным (компоненты MDAC) Microsoft, инкапсулирует пакет TDS внутри стандартного коммуникационного протокола, например TCP/IP или протокола именованных каналов. Уровень протокола сетевого интерфейса SQL Server является общим как для компонента Database Engine, так и для собственного клиента SQL Server. Непосредственно уровень протокола сетевого адаптера не настраивается. Вместо этого сервер и собственный клиент SQL Server настраиваются на использование того или иного сетевого протокола. После этого компонент Database Engine и собственный клиент SQL Server автоматически начинают использовать соответствующие параметры протокола. Сервер создает объект SQL Server, именуемый конечной точкой TDS, для каждого сетевого протокола. На сервере конечные точки TDS создаются самим SQL Server в процессе установки SQL Server.

В данном подразделе описан процесс создания и использования конечных точек TDS сервером. Дополнительные сведения о настройке сервера см. в разделе Конфигурирование сетевых протоколов сервера и сетевых библиотек.

На клиентском компьютере собственный клиент SQL Server должен быть установлен и настроен на использование сетевого протокола, включенного на сервере. Дополнительные сведения о клиентах см. в разделе Настройка клиентских сетевых протоколов.

Включение протоколов на сервере после установки

Как на клиенте, так и на сервере должны быть уже настроены базовые сетевые протоколы операционной системы (такие как TCP/IP). Сетевые протоколы обычно устанавливаются в процессе установки Windows; они не являются частью установки SQL Server. Если необходимый сетевой протокол недоступен и не настроен на сервере, то компонент Database Engine не будет запущен. Если необходимый сетевой протокол недоступен и не настроен на сервере, то сетевая библиотека не будет работать.

ПримечаниеПримечание

В оставшейся части раздела под выражением «включение протокола» подразумевается включение протокола в SQL Server, а не в операционной системе.

Сетевые протоколы, необходимые для соединения с SQL Server с другого компьютера, часто не включаются в процессе установки SQL Server. Поэтому для подключения клиентского компьютера может потребоваться включение протокола TCP/IP, именованных каналов или протокола VIA. (Протокол общей памяти включается по умолчанию при всех типах установки, но может использоваться только для подключения к компоненту Database Engine клиентского приложения на том же компьютере.) Дополнительные сведения о сетевых протоколах, включаемых для того или иного типа установки, см. в разделе Сетевая конфигурация SQL Server по умолчанию.

Чтобы активировать сетевые протоколы, используйте диспетчер конфигурации SQL Server. Альтернативным способом является включение протоколов в процессе установки с помощью параметров командной строки. Дополнительные сведения см. в разделе Как установить SQL Server 2008 R2 из командной строки.

После установки и настройки сетевых соединений SQL Server может прослушивать любую комбинацию серверных сетевых протоколов одновременно.

Определение конечных точек TDS

Конечная точка TDS представляет собой объект SQL Server — точку коммуникации между SQL Server и клиентом. SQL Server автоматически создает конечную точку для каждого из четырех протоколов сетевой библиотеки, поддерживаемых SQL Server. По умолчанию при включении протоколов к ним имеют доступ все пользователи. Если сетевой протокол не включен, конечная точка продолжает существовать, но не может быть использована. Для выделенного административного подключения (DAC) создается дополнительная конечная точка, которая может использоваться только членами предопределенной роли сервера sysadmin.

SQL Server создает для каждой конечной точки TDS уникальное имя. Автоматически создаваемые конечные точки показаны в следующей таблице.

Назначение

Имя конечной точки

Общая память

TSQL LocalMachine

Именованные каналы

TSQL Named Pipes

Протоколы TCP/IP

TSQL Default TCP

Протокол VIA

TSQL Default VIA

DAC

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

HTTP

HyperText Transport Protocol

Для протоколов именованных каналов и общей памяти может быть создана только одна конечная точка на экземпляр. Для этих типов протоколов не существует настраиваемых конечных точек. Для протоколов TCP/IP и VIA имеется назначенная по умолчанию конечная точка, но можно также создавать дополнительные. Конечные точки HTTP также создаются пользователями и не отображаются в диспетчере конфигурации SQL Server.

Важное примечаниеВажно!

Протокол VIA является устаревшим. В будущей версии Microsoft SQL Server эта возможность будет удалена. Избегайте использования этой возможности в новых разработках и запланируйте изменение существующих приложений, в которых она применяется.

Для системных конечных точек можно изменять только владельца и состояние (инструкцией ALTER ENDPOINT). Установленные по умолчанию конечные точки отключить нельзя, но можно их останавливать и запускать. Остановленная конечная точка продолжает прослушивание, но отклоняет и закрывает новые соединения.

ПримечаниеПримечание

По умолчанию клиенты настраиваются таким образом, что пытаются подключиться по всем протоколам, пока один из них не заработает. Если протокол TCP/IP отключен, клиенты пытаются подключиться по следующему протоколу. Если протокол TCP/IP включен, но конечная точка остановлена, попытка подключения не отклоняется, так что клиент не пытается подключиться по другим протоколам, но остановленное подключение использоваться не может. В этом случае необходимо явно подключиться к активной конечной точке.

Динамические порты TCP обычно подключаются к установленной по умолчанию конечной точке TCP.

Параметры протоколов в реестре

Параметры конечных точек TDS записываются в реестр. Пользователи могут создавать и изменять конечные точки с помощью инструкций языка Transact-SQL, а для включения и отключения протоколов использовать диспетчер конфигурации SQL Server, который запускает и останавливает конечные точки.

Если пользователь изменит параметры протокола в реестре, ничего не случится. Реестр отделен от метаданных.

Привязка соединения пользователя к конечной точке

При подключении к компоненту Database Engine SQL Server выполняет привязку соединения к конкретной конечной точке и определяет, предоставлено ли используемому для подключения имени входа разрешение на использование данной конечной точки. Привязка соединений осуществляется следующим образом.

  • Для соединений посредством общей памяти используется конечная точка TSQL LocalMachine.

  • Для соединений по протоколу именованных каналов используется конечная точка TSQL Named Pipes.

  • Для выделенных административных соединений используется конечная точка Dedicated Admin Connection.

  • По умолчанию для соединений по протоколу TCP используется конечная точка TSQL Default TCP. Если для конкретного порта TCP создана новая (пользовательская) конечная точка TCP, для соединений по данному порту TCP будет использоваться эта точка. Если создана новая конечная точка TCP/TSQL с указанием в качестве порта IP_ANY (т. е. любого), для дальнейших соединений по протоколу TCP будет использоваться эта точка.

  • Соединения по протоколу VIA рассматриваются таким же образом, как и подключения по протоколу TCP.

Поведение пользовательских конечных точек не отличается от поведения установленных по умолчанию. Если конечная точка создана для того или иного IP-адреса (или для всех IP-адресов указанием IP_ANY) и конкретного порта TCP, то разрешение на подключение к данной конечной точке предоставляется пользователям в результате действия, которое называется провизионированием. Провизионирование сохраняется вне зависимости от факта прослушивания сервером данной комбинации IP-адреса и порта TCP. Подключение к IP-адресу и порту TCP сопоставляется с конечной точкой в следующем порядке.

  1. Если IP-адрес и порт TCP в точности соответствуют IP-адресу и порту TCP конечной точки, она используется.

  2. При отсутствии точного соответствия порт TCP проверяется для всех конечных точек с параметром IP_ANY, и если этот порт TCP прослушивается определенной конечной точкой, она используется.

  3. При отсутствии точного соответствия порта используется установленная по умолчанию для протокола TCP конечная точка.

Результатом процесса привязки подключения к конечной точке всегда является выбор не более одной конечной точки. Для данной конечной точки проверяется разрешение на подключение. Если у пользователя отсутствует разрешение на подключение к данной конечной точке, поиск следующей конечной точки не производится.

Примеры: привязка соединений пользователей к конечным точкам

В следующем примере показан выбор конечной точки с помощью IP-адреса и порта TCP. Предполагается, что сервер настроен на прослушивание следующих IP-адресов и портов TCP:

127.0.0.1:1533

Далее предполагается, что установлены следующие конечные точки TCP.

Имя конечной точки

Значения настроек

Loopback

LISTENER_IP= 127.0.0.1 и LISTENER_PORT = 1533

Удаленный вызов процедур (RPC)

LISTENER_IP = ALL и LISTENER_PORT = 1533

TSQL Default TCP

Не привязана к какому-либо IP-адресу или порту

Имеются три возможности для подключений.

  • Если клиент соединяется по протоколу TCP по адресу 127.0.0.1:1533, то к данному сеансу привязывается конечная точка Loopback, так как имеется точное совпадение IP-адреса и порта TCP с конечной точкой Loopback.

  • Если клиент соединяется по протоколу TCP по адресу 251.40.20.151:1533, точное совпадение IP-адреса и порта TCP с конечной точкой отсутствует, но для подключения доступна конечная точка Remote, поскольку Remote прослушивает все IP-адреса и порты TCP. Если у соединяющего имени входа отсутствует разрешение на подключение к конечной точке Remote, то этот процесс завершается ошибкой. Попытки подключения к другим возможным конечным точкам, для которых у имени входа имеются разрешения, например TSQL Default TCP, не производятся.

  • Если клиент соединяется по протоколу TCP по адресу 251.40.20.151:1433, точное совпадение IP-адреса и порта TCP с конечной точкой отсутствует, как отсутствует и совпадение с портом TCP 1533 для любого IP-адреса, но для подключения доступна конечная точка TSQL Default TCP, так как TSQL Default TCP прослушивает все IP-адреса и порты TCP.

Обновление и установка

По умолчанию всем пользователям открыт доступ к конечным точкам TDS (кроме конечных точек выделенных административных соединений). Так как эти конечные точки создаются сервером для внутреннего использования, у них нет владельца и их невозможно привязать к той или иной учетной записи.

Управление конечными точками с помощью языка Transact-SQL

Для создания конечных точек и управления ими используется язык Transact-SQL. Конечные точки создаются инструкцией CREATE ENDPOINT, а удаляются инструкцией DROP ENDPOINT. Существуют также инструкции для управления конечными точками, изменения их параметров и владельцев.

Для подключения к экземпляру SQL Server с помощью конечных точек языка Transact-SQL у пользователей должно быть разрешение CONNECT для конечной точки и глобальное разрешение для входа на SQL Server. Разрешение на подключение к установленным по умолчанию конечным точкам предоставляется пользователям неявно при создании имен входа. Управление доступом к конечным точкам осуществляется с помощью инструкций GRANT | DENY | REVOKE CONNECT ON ENDPOINT.

При создании новой конечной точки TCP SQL Server автоматически отменяет все существующие разрешения на конечную точку TSQL Default TCP. Пример создания новой конечной точки TCP см. в разделе Как настроить компонент Database Engine на прослушивание нескольких портов TCP.

  • Для ограничения доступа к конечной точке администратор может запретить разрешение для группы EVERYONE (с помощью инструкции DENY CONNECT), а затем предоставить разрешение конкретным лицам или ролям (с помощью инструкции GRANT CONNECT).

  • Для возвращения разрешений в исходное состояние используется инструкция GRANT CONNECT для группы PUBLIC.

  • Для задания конечной точки для конкретного приложения с помощью инструкции DENY CONNECT запрещаются разрешения для всех пользователей, кроме пользователей данного приложения.

Примечание по безопасностиПримечание по безопасности

Авторизация для использования конечной точки привязывается к имени конечной точки. В случае изменения имени конечной точки ограничения безопасности (например, инструкции DENY CONNECT) надлежащим образом применяться не будут. Имя конечной точки изменяется при изменении порта. Если SQL Server прослушивает динамические порты, порт может измениться, что вызовет изменение имени конечной точки и отмену связанных с ней разрешений. Во избежание риска ослабления безопасности не следует устанавливать нестандартные разрешения на конечные точки, привязанные к динамическим портам, а также изменять порядок записи конечных точек TCP/IP в реестре.

Дополнительные сведения о настройке безопасности конечных точек см. в разделе GRANT, предоставление разрешений на конечные точки (Transact-SQL).