Как изменить порт экземпляра Microsoft SQL Server?

09.07.2020

insci

SQL Server

Один комментарий
В этой статье мы разберемся как узнать текущий TCP порт, на котором слушает и ожидает подключения именованный или default экземпляр MS SQL Server, как изменить порт подключения SQL Server на статический/динамический и как используется служба SQL Server Browser клиентами при подключении к SQL.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
- Default экземпляр SQL Server (MSSQLSERVER) работает на статическом порту TCP 1433. Именно к этому порту подключаются клиенты, или консоль SQL Server Management Studio (SSMS);
- Именованные экземпляры MSSQL и SQL Server Compact по-умолчанию настроены на использование динамического TCP порта из диапазона RPC (49152 – 65535).
Динамической порт означает, что номер порта, на котором принимает подключение экземпляр MSSQL назначается при запуске службы SQL Server. В большинстве случаев, даже после перезагрузки сервера, SQL Server начнет слушать тот же самый динамический TCP порт, который был назначен до перезагрузки. Но если этот порт занят, SQL Server запустится на новом порту TCP (приложение, которое использует SQL обычно без проблем получит номер нового порта от службы SQL Server Browser, об этом чуть ниже). Динамический порты SQLServer удобны с точки зрения простоты администрирования нескольких экземпляров SQL на одном сервере, но вызывают множество проблем, если в вашей сети используются межсетевые экраны.
Изменение номера TCP порта экземпляра SQL Server
Вы можете перенастроить ваш сервер так, чтобы он слушал на другом статическом TCP или динамическом порту. Как правило это нужно, когда на одном SQL Server-e запушено несколько экземпляров, или у вас используются межсетевые экраны.
Для управления портами подключения нам потребуется SQL Server Configuration Manager. Обычно эта оснастка устанавливается вместе с экземпляром MSSQL.
Запустите SQL Server Configuration Manager и разверните секцию SQL Server Network Configuration.
В моём случае на сервере установлен всего 1 экземпляр MSSQL– NODE1, поэтому настраивать порты я буду для него. В списке доступных протоколов для данного экземпляра имеются:
- Протокол Shared Memory используется для подключения с локального компьютера (с того, где установлен экземпляр MSSQL). Отключать его не рекомендуется;
- Named Pipes может использоваться по протоколу TCP/IP, но его использования не несёт особой выгоды, поэтому оставим его выключенным;

Щелкните дважды по TCP/IP.

На вкладке Protocol всего 3 параметра:
- Enabled – убедитесь, что протокол TCP/IP включен;
- Keep Alive – частота проверки того, что соединение еще актуально (в миллисекундах). Не меняйте этот параметр без необходимости;
- Listen All – неочевидная настройка, которая отвечает за секцию IPAll во вкладке IP Addresses. Если Listen All выставлена в No, то секция IPAll будет игнорироваться.
На вкладке IP Addresses вы увидите перечисление всех IP адресов машины (включая IPv6 и локальные) и соответствующие им настройки. Здесь вы можете задать разные TCP порты для локального и внешнего адреса подключения, или разные порты для разных внешних адресов (если у вас сервер с несколькими сетевыми интерфейсами в разных сегментах).

Скорее всего вы захотите изменить порт сразу для всех IP, поэтому нужно изменить его секции IPAll.

Параметр TCP Dynamic Ports отвечает за использование динамических портов.
- Пустое значение TCP Dynamic Ports отключает использование динамических портов SQL Server;
- 0 включает использование динамических TCP портовиз диапазона RPC 49152 – 65535;
Чтобы установить статический TCP порт для данного экземпляра SQL Server, отключите TCP Dynamic Ports, и задайте новый номер статического порта в параметре TCP Port.

Для применения изменений перезапустите службу SQL Server. Обратите внимание на отключенную службу SQL Server Browser.

Проверьте, что теперь к вашему экземпляру SQL можно подключиться через SSMS. Формат строки подключения такой:

Подключиться без указания порта не получится, поскольку SQL Browser выключен.
TCP порты и служба SQL Server Browser
До версии MSSQL 2000 нельзя было установить больше одного экземпляра СУБД на один компьютер. Такая возможность появилась в более новых версиях MSSQL. Служба SQL Server Browser впервые появилась в SQL Server 2005 и использовалась как посредник для распределения подключений между различными экземплярами MSSQL, установленными на одном компьютере.
Также SQL Server Browser отвечает за подключение к MSSQL (например, из SQL Server Management Studio) без указания порта, например testnode1\node1 . Служба SQL Server Browser узнает номер текущего динамического порта экземпляра из реестра и сообщает его клиенту.
Если вы отключите службу SQL Server Browser, то для подключения к экземпляру необходимо вручную указывать TCP порт. Например, testnode1\node1, 1440 .
При отключенной службе SQL Server Browser и использовании динамических портов приложения не смогут узнать номер порта, к которому нужно обращаться.
Стандартные порты SQL Server
- TCP 1433 — Стандартный порт SQL Server
- UDP 1433 – порт, используемый SQL Server Browser
Другие порты настраиваются при установке/настройке конкретного сервиса. Так что по умолчанию, Вам достаточно открыть в файерволе только два порта: 1433 TCP/UDP.
Если у вас используются строгие настройки фаервола, или если вы хотите максимально ограничить SQL Server, рекомендуется отключить Dynamic Ports (выставить пустое значение) и отключить службу SQL Server Browser.
Если же ваши SQL Server’a находятся в публичном доступе, то будет хорошей идеей поменять порт на нестандартный. Это не защитит от атак полностью, но снизит их число.
Онлайн-курс по устройству компьютерных сетей
На углубленном курсе «Архитектура современных компьютерных сетей» вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Предыдущая статья Следующая статья
Настройка SQL Server прослушивания определенного TCP-порта
В этой статье описывается, как настроить экземпляр ядра СУБД SQL Server для прослушивания определенного фиксированного порта с помощью диспетчер конфигурации SQL Server. Если прослушивание включено, то экземпляр компонента Компонент SQL Server Database Engine по умолчанию прослушивает TCP-порт 1433. Именованные экземпляры Компонент Database Engine и SQL Server Compact настроены для использования динамических портов. Это означает, что при запуске службы SQL Server для них выбирается свободный порт. При подключении к именованным экземплярам через брандмауэр настройте ядро СУБД для прослушивания определенного порта, чтобы открыть соответствующий порт в брандмауэре.
Поскольку порт 1433 — известный стандарт SQL Server, некоторые организации указывают, что в целях безопасности номер порта SQL Server необходимо изменить. В некоторых средах это может быть очень полезным. Однако архитектура TCP/IP позволяет сканеру портов запрашивать открытые порты, поэтому изменение номера порта не считается надежной мерой безопасности.
Дополнительные сведения о настройках брандмауэра Windows по умолчанию и описание портов TCP, влияющих на компонент Database Engine, службы Analysis Services, службы Reporting Services и службы Integration Services, см. в разделе Настройка брандмауэра Windows для разрешения доступа к SQL Server.
При выборе номера порта руководствуйтесь приведенным по адресу https://www.iana.org/assignments/port-numbers списком номеров портов, которые назначаются конкретным приложениям. Выберите незанятый номер порта. Дополнительные сведения см. в разделе Предусмотренный по умолчанию динамический диапазон портов для TCP/IP, который изменился в Windows Vista и Windows Server 2008.
Компонент Database Engine начнет прослушивание нового порта после перезапуска. Однако служба браузера SQL Server отслеживает реестр и возвращает новый номер порта, как только будет изменена конфигурация, даже если компонент Database Engine его не использует. Перезапустите компонент Database Engine, чтобы обеспечить согласованность и избежать ошибок соединения.
Использование диспетчер конфигурации SQL Server
Назначение номера порта TCP/IP для ядра СУБД SQL Server
- В области консоли диспетчера конфигурации SQL Server разверните узел Сетевая конфигурация SQL Server, выберите Протоколы для , а затем на панели справа дважды щелкните TCP/IP.
Примечание Если возникают проблемы при открытии SQL Server Configuration Manager, см. статью Диспетчер конфигурации SQL Server.

Примечание Если параметр Прослушивать все на вкладке Протокол имеет значение «Да», то будут использоваться только значения TCP-порт и Динамический TCP-порт в разделе IPAll, а отдельные разделы IPn будут полностью игнорироваться. Если параметр Прослушивать все имеет значение «Нет», то параметры TCP-порт и Динамический TCP-порт в разделе IPAll будут игнорироваться, а использоваться будут параметры TCP-порт, Динамический TCP-порт и Включено в отдельных разделах IPn. В каждом разделе IPn есть параметр Включено, по умолчанию имеющий значение «Нет», который позволяет игнорировать этот IP-адрес в SQL Server, даже если порт задан.
Подключение
После настройки SQL Server прослушивания определенного порта существует три способа подключения к определенному порту с помощью клиентского приложения.
- Запустите службу браузера SQL Server на сервере для подключения к экземпляру компонента Компонент Database Engine по имени.
- Создайте псевдоним на клиенте, указав номер порта.
- Настройте клиент на использование пользовательской строки подключения.
См. также раздел
- Создание или удаление псевдонима сервера для использования клиентом (диспетчер конфигурации SQL Server)
- Служба обозревателя SQL Server
Как проверить, прослушивает ли SQL Server динамический или статический порт
В этой статье описывается, как определить, прослушивает ли именованный экземпляр Microsoft SQL Server динамический и статический порт. Эти сведения могут быть полезны при устранении различных проблем с подключением, связанных с SQL Server.
По умолчанию экземпляр SQL Server с именем настроен для прослушивания динамических портов. Он получает доступный порт из операционной системы. Вы также можете настроить SQL Server именованные экземпляры для запуска с определенного порта. Это называется статическим портом. Дополнительные сведения о статических и динамических портах в контексте SQL Server см. в разделе Статические и динамические порты.
Используйте следующую процедуру, чтобы определить, прослушивает ли SQL Server именованный экземпляр динамический порт или статический порт.
Вариант 1. Использование диспетчер конфигурации SQL Server
- В диспетчер конфигурации SQL Server разверните узел SQL Server Конфигурация сети, разверните пункт Протоколы в поле Имя экземпляра, а затем дважды щелкните TCP/IP.
- В разделе Свойства TCP/IP выберите Протокол.
- Проверьте значение в параметре Прослушивание всех . Если задано значение Да, перейдите к шагу 4. Если для него задано значение Нет, перейдите к шагу 6.
- Перейдите в раздел IP-адреса и прокрутите страницу свойств TCP/IP вниз.
- Проверьте значения в разделе ВСЕ IP-адреса и используйте следующую таблицу, чтобы определить, прослушивает ли именованный экземпляр динамический или статический порт.
| Динамические порты TCP | TCP-порт | SQL Server экземпляр, использующий динамические или статические порты? |
|---|---|---|
| «Пустой». | «Пустой». | Динамические порты |
| «Пустой». | Динамические порты — динамический порт, который SQL Server в настоящее время прослушивает. | |
| Одновременный прослушивание динамического и статического портов |
| Динамические порты TCP | TCP-порт | SQL Server экземпляр, использующий динамические или статические порты? |
|---|---|---|
| «Пустой». | «Пустой». | Динамические порты |
| «Пустой». | Динамические порты — это динамический порт, который SQL Server в настоящее время прослушивает. | |
| Одновременный прослушивание динамического и статического портов |
Значение 0 в динамических портах TCP указывает, что именованный экземпляр в настоящее время не запущен и настроен для динамических портов. После запуска экземпляра поле значения будет отражать динамический порт, используемый экземпляром в данный момент.
Вариант 2. Использование PowerShell
- Выполните следующий скрипт в интегрированной среде сценариев PowerShell. В окне Консоли отображаются все соответствующие tcp/IP-адреса для всех экземпляров SQL Server (SQL Server 2014–SQL Server 2019), установленных в системе.
clear Write-Host "SQL Server 2019" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@> |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort,DisplayName, @>, IpAddress |Format-Table -AutoSize Write-Host "SQL Server 2017" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@> |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL14.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort, DisplayName, @>, IpAddress |Format-Table -AutoSize Write-Host "SQL Server 2016" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@> |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort, DisplayName, @>, IpAddress |Format-Table -AutoSize Write-Host "SQL Server 2014" Write-Host "=====================" Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.*\MSSQLServer\SuperSocketNetLib\Tcp" | Select-Object -Property Enabled, KeepAlive, ListenOnAllIps,@> |Format-Table -AutoSize Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL12.*\MSSQLServer\SuperSocketNetLib\Tcp\IP*\" | Select-Object -Property TcpDynamicPorts,TcpPort, DisplayName, @>, IpAddress |Format-Table -AutoSize
| Динамические порты TCP | TCP-порт | SQL Server экземпляр, использующий динамические или статические порты? |
|---|---|---|
| «Пустой». | «Пустой». | Динамические порты |
| «Пустой». | Динамические порты — это динамический порт, прослушиваемый SQL в настоящее время. | |
| Одновременный прослушивание динамического и статического портов |
| Динамические порты TCP | TCP-порт | SQL Server экземпляр, использующий динамические или статические порты? |
|---|---|---|
| «Пустой». | «Пустой». | Динамические порты |
| «Пустой». | Динамические порты — это динамический порт, который SQL Server в настоящее время прослушивает. | |
| Одновременный прослушивание динамического и статического портов |
Значение 0 в динамических портах TCP указывает, что именованный экземпляр в настоящее время не запущен и настроен для динамических портов. После запуска экземпляра поле значения будет отражать динамический порт, используемый экземпляром в данный момент.
См. также
- Проблема с согласованной проверкой подлинности 0400.
- Настройка сервера для прослушивания определенного TCP-порта
- Свойства TCP/IP (вкладка «IP-адреса»)
Определение номера порта SQL сервера: подробный гид
Чтобы определить номер порта, на котором работает SQL Server, можно использовать Диспетчер конфигурации SQL Server. Для этого следуйте инструкции: в разделе Настройки сети SQL Server перейдите к Протоколам для [ИмяВашегоЭкземпляра] и откройте TCP/IP. Далее в окне Свойства выберите вкладку IP-адреса и обратите внимание на значение в поле TCP-порт. По умолчанию для стандартных экземпляров используется порт 1433.
Скопировать код
-- Простой скрипт для определения номера порта. SELECT local_tcp_port FROM sys.dm_exec_connections WHERE local_net_address IS NOT NULL;
Этот скрипт покажет номер порта, который в данный момент используется вашим SQL сервером.
Погружение в настройки сети
Погрузитесь в детали настройек сети и журналов сервера, словно морской дайвер в поисках сокровищ.
Секреты журналов сервера
Номера портов могут быть скрыты в журналах сервера, как замаскированные пассажиры в темном углу:
Скопировать код
-- Откройте записи в журналах сервера. EXEC xp_readerrorlog 0, 1, N'Server is listening on', N'any', NULL, NULL, N'asc'
Поищите строки, содержащие текст «Server is listening on», чтобы найти упоминание номера вашего порта.
Организация работы на сервере
Для удобства работы с сетевыми протоколами рекомендуется использовать графические инструменты Диспетчера конфигурации SQL Server:
- Запустите Диспетчер конфигурации.
- Перейдите в раздел Настройки сети SQL Server.
- Откройте Свойства TCP/IP.
- Во вкладке IP-адреса просмотрите раздел IPAll.
Настройка брандмауэра
Правильная настройка брандмауэра крайне важна для обеспечения доступа к SQL Server:
- Нажмите кнопку «Пуск», выберите Панель управления >Система и безопасность >Брандмауэр Windows Defender.
- Перейдите в Расширенные настройки.
- В разделе Входящие правила создайте новое правило, нажав на кнопку Новое правило.
- Убедитесь, что порт SQL Server добавлен в список исключений и доступ к нему открыт.
Управление с «cliconfg.exe»
cliconfg.exe — это утилита для управления сетевыми протоколами:
- Запустите cliconfg.exe через диалоговое окно «Выполнить».
- Включите TCP/IP.
- На вкладке Алиас укажите имя сервера и номер порта.
Визуализация
Представьте SQL серверы и их порты как конфигурируемые радиостанции:
| SQL Server | TCP Port |
|---|---|
| SQL Server 1 | ️ 1433 |
| SQL Server 2 | ️ 1444 |
| SQL Server 3 (Динамический) | ️ . |
Настраивайтесь на нужную «частоту» и успешно соединитесь с базой данных.
Практические примеры
Работа с динамическими портами
В случае работы с динамическими портами, которые могут меняться, используется служба SQL Server Browser, которая указывает запросам актуальный номер порта.
Особенности SQL Server Express
У SQL Server Express есть свои нюансы – для общения с другими сервисами он использует службу Browser. Для проверки функционирования этой службы вы можете воспользоваться командой services.msc .
Код для определения порта
Следующий скрипт позволяет определить номер порта, если вы работаете с помощью Powershell: