Исходная попытка
У меня есть Azure VM с Windows Server 2012, на котором я только что установил компонент SQL Server 2012 Express Database Engine. Затем я выполнил инструкции здесь для удаленного подключения к SQL Server Management Studio.
- Создание конечной точки TCP для виртуальной машины
- Откройте TCP-порты в брандмауэре Windows
- Настройка SQL Server для прослушивания протокола TCP
- Настройка SQL Server для проверки в смешанном режиме
- Создание логинов аутентификации SQL Server
- Определите DNS-имя виртуальной машины
- Подключиться к движку базы данных с другого компьютера.
После шага семь я получил следующую ошибку:
Произошла ошибка, связанная с сетью или конкретным экземпляром, в то время как установление соединения с SQL Server. Сервер не найден или был недоступен. Проверьте правильность имени экземпляра и SQL Server настроен для удаленного подключения. (поставщик: Именованный Pipes Provider, ошибка: 40 - Не удалось открыть соединение с SQL Server) (Microsoft SQL Server, ошибка: 53)
Что еще мне нужно настроить перед удаленным подключением?
Устранение неполадок
Я выполнял инструкции по устранению неполадок здесь. Каждый блок-комментарий ниже - это шаг, описанный в этой ссылке.
Подтвердить, что экземпляр SQL Server Database Engine установлен и работает.
Готово. Мы установили SQL Server Express и запускаем его как именованный экземпляр SQLEXPRESS.
Если вы пытаетесь подключиться к именованному экземпляру, убедитесь, что Служба браузера SQL Server запущена.
Готово. Мы выполнили шаги здесь, чтобы включить службу браузера SQL Server.
Получить IP-адрес компьютера.
Готово. Мы будем использовать их позже для тестирования подключения и, возможно, для установки статического порта для SQLEXPRESS.
10.241.62.155
fe80:: 45c: 8c29: e19f: f78b% 15
Получить номер порта TCP, используемый SQL Server.
Готово. Журналы журналов SQL Server Management Studio показали, что сервер прослушивал порт 49169.
Включить протоколы
Готово. Мы уже включили TCP/IP в диспетчере конфигурации, но на всякий случай мы перезапустили службу SQL Server.
Тестирование соединений TCP/IP
Готово. Мы использовали tcping.exe для проверки подключения (cmd ping не работает быстро с Azure). Мы смогли подключиться к порту 80.
- tcping.exe buddha.cloudapp.net > успешный
- tcping.exe buddha.cloudapp.net 80 > успешный
Тестирование локального соединения
Готово. Мы использовали sqlcmd.exe из командной строки и могли локально подключаться через TCP с именем пользователя и паролем.
- sqlcmd -S Buddha\SQLEXPRESS (успех по протоколу общей памяти)
- sqlcmd -S tcp: Buddha\SQLEXPRESS (успех через TCP)
- sqlcmd -S tcp: Buddha\SQLEXPRESS -U sa -P (успех через TCP с именем пользователя)
- sqlcmd -S tcp: 10.241.62.155\SQLEXPRESS -U sa -P (успех с внутренним IP-адресом)
Открытие порта в брандмауэре
Мы открыли порт, который прослушивает SQLEXPRESS. Журналы сервера (выше) показали, что SQLEXPRESS прослушивает порт 49169, но это всего лишь один из многих динамических портов, и мы хотели настроить статический порт 1435.
- Используйте WF.msc для создания входящего правила TCP для порта 1435.
- Используйте портал управления Azure для создания конечной точки TCP для порта 1435.
В инструкциях по устранению неполадок также говорится:
Если вы подключаетесь к именованному экземпляру или к порту, отличному от TCP порт 1433, вы также должны открыть UDP-порт 1434 для SQL Server Служба браузера.
Поскольку мы подключаем SQLEXPRESS (именованный экземпляр), нам нужно открыть порт 1434 для UDP.
- Используйте WF.msc для создания входящего правила UCP для порта 1434.
- Используйте портал управления Azure для создания конечной точки UDP для порта 1434
Дальнейшие исследования по подключению к именованным экземплярам выявили проблемы с динамическим портом. Причина, по которой мы используем порт 1435 (статический) вместо порта 49169 (один из многих эффективных вариантов.)
Экземпляры SQL Server Express, SQL Server Compact и имена экземпляры Database Engine используют динамические порты. Чтобы настроить эти экземпляры для использования определенного порта, см. Настройка сервера для прослушивания Конкретный порт TCP (диспетчер конфигурации SQL Server). и здесь.
Готово. Мы перешли в SQL Configuration Manager > Конфигурация сети SQL Server > Протоколы для SQLEXPRESS > TCP/IP, мы сделали следующее.
Вкладка "Протокол" > "Слушать все" > "Нет".
Вкладка IP-адресов > для каждого указанного адреса
- Включено > Да
- Динамические порты TCP > Бланк (удалить ноль)
- Порт TCP > 1435 (или ваш выбор)
После перезапуска службы SQLEXPRESS мы снова просмотрели журналы SQL Server Management Studio и обнаружили, что сервер прослушивает порт 1435!!! Ура!
Тестирование соединения
Готово. Мы открыли SQL Server Management Studio на нашем локальном (не Azure) компьютере и подключились.
- buddha.cloudapp.net, 1435 OR buddha.cloudapp.net\SQLEXPRESS
- са
- пароль
Success.