Включить удаленные подключения для SQL Server Express 2012

403

Я только что установил SQL Server Express 2012 на свой домашний сервер. Я пытаюсь подключиться к нему из Visual Studio 2012 с настольного компьютера и постоянно получаю известную ошибку:

При установлении соединения с SQL Server произошла ошибка, связанная с сетью или экземпляром. Сервер не найден или не был доступен. Убедитесь, что имя экземпляра указано правильно и что SQL Server настроен для разрешения удаленных подключений. (поставщик: поставщик именованных каналов, ошибка: 40 - не удалось открыть соединение с SQL Server)

Что я сделал, чтобы попытаться это исправить:

  • Запустите диспетчер конфигурации SQL Server на сервере и включите браузер SQL Server.
  • Добавьте исключение брандмауэра Windows на сервере для TCP, порты 1433 и 1434 в локальной подсети.
  • Убедитесь, что у меня есть логин на экземпляре SQL Server для пользователя, на котором я вошел как на рабочем столе.
  • Убедитесь, что я использую проверку подлинности Windows на экземпляре SQL Server.
  • Повторно перезапустите SQL Server и весь чертов сервер.
  • Вытяни все мои волосы.

Как я могу получить SQL Server 2012 Express для разрешения удаленных подключений !?

Райан Ланди
источник
7
Я решил, включив службу браузера SQL Server: D. Спасибо за публикацию.
alansiqueira27
1
Разблокировка порта 1433 UDP помогла мне!
Майкл
1
И если вы используете виртуальную машину Azure, не забудьте открыть порт и через портал управления Azure (который действует как внешний брандмауэр для собственного брандмауэра виртуальной машины ...).
Вот
Если вам интересно, куда исчез Sql Server Configuration Manager в более новых версиях,
загляните

Ответы:

731

Хорошо, рад, что спросил . Решение, которое я наконец обнаружил, было здесь:

Как мне настроить SQL Server Express, чтобы разрешить удаленные соединения tcp / ip через порт 1433?

  1. Запустите диспетчер конфигурации SQL Server.
  2. Перейдите к Конфигурация сети SQL Server> Протоколы для SQLEXPRESS.
  3. Убедитесь, что TCP / IP включен.

Пока все хорошо и вполне ожидаемо. Но потом:

  1. Щелкните правой кнопкой мыши TCP / IP и выберите « Свойства» .
  2. Убедитесь, что в разделе IP2 в качестве IP-адреса задан IP-адрес компьютера в локальной подсети.
  3. Прокрутите вниз до IPAll.
  4. Убедитесь , что TCP Dynamic Ports является пустым . (У меня был установлен 5-значный номер порта.)
  5. Убедитесь, что для TCP-порта установлено значение 1433 . (Мой был пустым.)

(Кроме того, если вы выполните эти шаги, нет необходимости включать браузер SQL Server, и вам нужно только разрешить порт 1433, а не 1434.)

Эти дополнительные пять шагов - это то, что я не могу вспомнить, когда-либо приходилось делать в предыдущей версии SQL Server, Express или иным образом. Похоже, они были необходимы, потому что я использую именованный экземпляр (myservername \ SQLEXPRESS) на сервере вместо экземпляра по умолчанию. Посмотреть здесь:

Настройка сервера для прослушивания определенного порта TCP (диспетчер конфигурации SQL Server)

Райан Ланди
источник
7
Если SQL Server Express - не единственный экземпляр, может потребоваться UNASSIGN порт 1433 в других экземплярах. У меня был экземпляр по умолчанию 2008 R2 (MSSQLSERVER), и единственный способ подключиться к ним обоим извне - назначить порт 1433 экземпляру 2012 (как указано выше) и изменить назначения портов для более старого экземпляра по умолчанию на TCP Dynamic Порты = "0" и TCP Port = "" (пусто). Делая это наоборот, давал доступ только к экземпляру по умолчанию.
Роберт Кэлхун
17
Эта IPAllустановка была советом спасителя! Мой был как твой ...: D
Leniel Maccaferri
18
В случае, если это поможет кому-то еще ... это помогло, но я все еще не смог подключиться, пока не запустил службу браузера SQL Server. (Примечание. Для этого мне пришлось зайти в приложение «Службы» Windows, потому что по какой-то причине тип запуска службы обозревателя SQL Server был «Отключен». Изменил тип запуска на «Автоматический», запустил службу и затем возможность подключения.)
Mercurial
9
В Windows 8 и SQL 2012 Express SP1, установленном для экземпляра SQLEXPRESS, мне пришлось установить динамические порты на любое значение, кроме пустого (если вы удалили его, установите 0, тогда он будет пересчитывать новый случайный порт для вас) И также открыть ОБА TCP Правила входящего порта 1433 и UDP 1434 в панели управления Advanced Firewall. Когда динамические порты были пустыми, SQL-сервер просто зависал при запуске.
Тони Уолл
10
Просто хотел сказать спасибо и upvote. Вы сэкономили мне много времени. Вы не против обновить ваш пост с правильным синтаксисом подключения? Мне нужно использовать myserver\sqlexpress,[portnumber]без скобок. Заметьте, есть ,и нет:
Марко
105

Правильный способ подключения к удаленному SQL Server (без открытия UDP-порта 1434 и включения браузера SQL Server) заключается в использовании ip и порта вместо именованного экземпляра .

Использование ip и порта вместо именованного экземпляра также безопаснее, так как уменьшает площадь атаки.

Возможно, 2 картины говорят 2000 слов ...

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

введите описание изображения здесь

Этот метод требует открытия UDP-порта 1434 и запуска браузера SQL Server.

введите описание изображения здесь

Росди Касим
источник
Можете ли вы уточнить, что вы имеете в виду, говоря, что это «правильный» способ сделать это?
Райан Ланди
3
@Kyralessa Ха! ... теперь, когда я снова трезвый после 4-5 часов потянув за волосы, пытаясь соединиться с моим удаленным экземпляром, я, вероятно, должен объяснить, что «правильный» здесь подразумевается для чтения из моего контекста. Неправильно подключаться с использованием имени экземпляра, поскольку я не включил браузер SQL Server.
Росди Касим
Я добавил некоторые пояснения к своему ответу, чтобы избежать недоразумений.
Росди Касим
1
Спасибо;) Если у вас нет доступа для запуска службы браузера, вы должны указать порт.
Арман Макхитарин
3
плюс 1 за то, что MS использует запятую вместо столбцов в качестве разделителя для номера порта
Jorj
32

Еще кое-что...

Kyralessa предоставляет отличную информацию, но я хочу добавить еще одну вещь, в которой я был озадачен даже после этой статьи.

Под Сетевой конфигурацией SQL Server> Протоколы для Сервера> TCP / IP Включен. Щелкните правой кнопкой мыши TCP / IP и выберите свойства. Под IP-адресами необходимо установить для параметра «Включено» значение «Да» для каждого используемого вами типа подключения.

введите описание изображения здесь

Пит
источник
18

Вы можете использовать это, чтобы решить эту проблему:

Перейдите в START> EXECUTE и запустите CLICONFG.EXE.

Протокол Named Pipes будет первым в списке. Удалите его и продвигайте TCP / IP.

Протестируйте приложение тщательно.

Я надеюсь, что это поможет.

Ageu
источник
Вау, что жемчужина ... спасибо. Никогда не знал, что даже существует.
Луи ван Тондер
1
Это настраивает КЛИЕНТА на использование TCP / IP, а не сервера.
MCR
OMG, это работает !! только что вошел, чтобы проголосовать за этот ответ. спасибо
Аки
15

Вы также можете установить

Слушайте все, чтобы НЕТ

в диалоговом окне протокола, затем в IP-адрес IP1 (скажем)

включите Да,

определить ваш IP-адрес,

установите для TCP Dynamic значение Blank и

TCP-порт до 1433 (или что-то еще)

johnroster
источник
Выполнение этого в Windows 8.1 с установленным SQL 2012 Express SP1 приводило к зависанию SQL при запуске :(
Zhaph - Ben Duguid
Я установил все записи IP 1, 2, ... на enabled + active, удаленный динамический, стертый порт и установил IPAll port на 1433, затем мне пришлось добавить правила для открытия TCP 1433 и UPD 1434 в брандмауэре (1434 не требуется, если не используется имя, а только номер порта).
Мордачай
11

Эта статья помогла мне ...

Как включить удаленные подключения в SQL Server

Все в SQL Server было настроено, моя проблема была в том, что брандмауэр блокировал порт 1433

JGilmartin
источник
Все знают или легко сталкиваются с конфигурацией разрешенных портов Azure. Не приходило мне в голову, что порт может быть заблокирован брандмауэром WINDOWS VM. Спасибо. + 1
2b77bee6-5445-4c77-b1eb-4df3e5
11

У меня была эта проблема недавно. 2015 авг

Решается открытием диспетчера конфигурации SQL Server

  • Конфигурация сети SQL Server -> Протоколы для SQLEXPRESS
  • Свойства на TCP / IP -> вкладка IP-адреса
  • Все остается по умолчанию, только установите IPALL: TCP-порт на 1433

Можно подключиться с помощью диспетчера SQL Server к машине: [hostaddress], 1433

Пример:

введите описание изображения здесь

DDan
источник
6

При моей установке SQL Server 2012 Developer Edition, установленной с настройками по умолчанию, мне просто нужно было загрузить Диспетчер конфигурации SQL Server -> Конфигурация сети SQL Server -> Протоколы для MSSQLSERVER и изменить TCP / IP с Отключено на Включено.

Фил
источник
1
Краткое примечание: для меня это не сработало. Неправильный IP-адрес был там по какой-то причине. Тем не менее, шаги Киралессы сделали свое дело, поскольку они включили обновление IP.
Брайан Маккей
Это работает для одного из моих серверов, но не для другого.
Чени
5

Мне пришлось добавить правило входящего порта брандмауэра, чтобы открыть UDP-порт 1434. Это тот, который прослушивает Sql Server Browser.

Том Редферн
источник
3

Я предпочитаю способ «Росди Касим», так как он не требует детальной настройки IP.

Я обязательно забуду это снова, когда попробую снова запустить другой сервер.

Делайте это просто глупо (KISS), просто включите службу браузера Sql Server, затем добавьте \ SQLEXPRESS за IP-адресом при подключении к серверу.

Прямое использование IP без "\ SQLEXPRESS" было моей точкой отказа, поскольку он не использует порт по умолчанию.

Спасибо.

Инопланетянин
источник
3

У меня была такая же проблема с SQL Server 2014 локально установленным именованным экземпляром. Подключение с использованием FQDN\InstanceNameне удастся, а подключение с использованием только моей hostname\InstanceNameработало. Например: подключение с помощью mycomputername\sql2014сработало, а с помощью - mycomputername.mydomain.org\sql2014нет. DNS разрешен правильно, TCP / IP был включен в SQL Configuration Manager, добавлены правила брандмауэра Windows (а затем отключил брандмауэр для проверки, чтобы убедиться, что он ничего не блокирует), но ни один из них не устранил проблему.

Наконец, мне пришлось запустить службу « SQL Server Browser » на SQL Server, и это решило проблему с подключением.

Я никогда не осознавал, что служба браузера SQL Server действительно помогает SQL Server устанавливать соединения; У меня сложилось впечатление, что это просто помогло заполнить выпадающие списки, когда вы нажали кнопку «искать больше» для подключения к серверам, но на самом деле помогает выровнять запросы клиентов с правильным номером порта # для использования, если порт № не назначен явно (аналогично как привязки веб-сайтов помогают устранить ту же проблему на веб-сервере IIS, на котором размещены несколько веб-сайтов).

Этот элемент подключения дал мне подсказку о службе браузера SQL Server: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- имя

  • когда вы используете wstst05 \ sqlexpress в качестве имени сервера, клиентский код отделяет имя компьютера от имени экземпляра, а wstst05 сравнивается с именем netbios. Я не вижу проблем для них, и соединение считается локальным. Оттуда мы получаем необходимую информацию, не связываясь с браузером SQL, и без проблем подключаемся к экземпляру SQL через общую память.
  • Когда вы используете wstst05.capatest.local \ sqlexpress, клиентский код не может сравнить имя (wstst05.capatest.local) с именем netbios (wstst05) и считает соединение «удаленным». Это сделано специально, и мы обязательно рассмотрим улучшение этого в будущем. В любом случае, учитывая, что соединение является удаленным, и тот факт, что это именованный экземпляр, клиент решает, что ему нужно использовать SQLBrowser для разрешения имен. Он пытается связаться с браузером SQL по wstst05.capatest.local (UDP-порт 1434) и, очевидно, эта часть не выполняется. Отсюда и ошибка, которую вы получаете.

Причина службы «Браузер SQL Server» от TechNet (выделено мной): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx

Из раздела «Использование браузера SQL Server»:

Если служба браузера SQL Server не запущена, вы все равно сможете подключиться к SQL Server, если укажете правильный номер порта или именованный канал. Например, вы можете подключиться к экземпляру SQL Server по умолчанию с TCP / IP, если он работает на порту 1433. Однако, если служба браузера SQL Server не работает, следующие соединения не работают :

  • Любой компонент, который пытается подключиться к именованному экземпляру без полного указания всех параметров (таких как порт TCP / IP или именованный канал) .
  • Любой компонент, который генерирует или передает информацию сервера \ экземпляра, которая впоследствии может быть использована другими компонентами для повторного подключения.
  • Соединение с именованным экземпляром без указания номера порта или канала.
  • ЦАП для именованного экземпляра или экземпляра по умолчанию, если не используется порт TCP / IP 1433.
  • Служба перенаправления OLAP.
  • Перечисление серверов в SQL Server Management Studio, Enterprise Manager или Query Analyzer.

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

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

И больше информации из той же статьи из раздела «Как работает браузер SQL Server»:

Потому что только один экземпляр SQL Server может использовать порт или каналДля именованных экземпляров, включая SQL Server Express, назначаются разные номера портов и имена каналов. По умолчанию при включении как именованные экземпляры, так и SQL Server Express настроены на использование динамических портов, то есть доступный порт назначается при запуске SQL Server. При желании конкретный порт может быть назначен экземпляру SQL Server. При подключении клиенты могут указать определенный порт; но если порт назначается динамически, номер порта может меняться при каждом перезапуске SQL Server, поэтому правильный номер порта неизвестен клиенту. ... Когда клиенты SQL Server запрашивают ресурсы SQL Server, сетевая библиотека клиента отправляет на сервер сообщение UDP, используя порт 1434. Браузер SQL Server отвечает портом TCP / IP или именованным каналом запрошенного экземпляра.

BateTech
источник
2

Мне пришлось добавить порт через Configuration Manager и добавить номер порта в моем подключении sql [хост] \ [имя экземпляра БД], 1433

Обратите внимание, (запятая) между именем экземпляра и портом

dynamiclynk
источник
1

У меня была проблема, отличная от тех, что упоминались до сих пор!

Я должен начать с того, что у меня это было в Visual Studio, а не в SQL Server Express, но решение должно быть точно таким же.

Ну, боже, это на самом деле очень просто и, возможно, немного глупо. Когда я попытался создать базу данных, и Visual Studio предложила имя SQL Server, оно дало мне мое имя пользователя Windows, и, поскольку это фактически имя сервера, я выбрал его.

На самом деле это было мое имя пользователя Windows \SQLEXPRESS. Если вы не меняли никаких настроек, возможно, это тоже ваше. Если это работает, прекратите читать; это мой ответ Если это не работает, возможно, имя другое.

Если, как и я, у вас была эта проблема только в Visual Studio, чтобы проверить, что у вас, выполните следующие действия:

  1. Откройте значок SQL Server Management Studio .
  2. Если вы не видите свой сервер (по умолчанию закрепленный слева), нажмите F8или перейдите в « Просмотр» -> «Обозреватель объектов» .
  3. Щелкните правой кнопкой мыши на имени сервера и выберите Свойства (последний элемент)
  4. Внизу слева вы можете увидеть фактическое имя вашего сервера в разделе « Сервер » (не «Соединение», а над ним).

Это имя сервера, и это то, что вы должны попытаться подключиться! не то, что предлагает Visual Studio!

MasterMastic
источник
1

В моем случае база данных работала на нестандартном порту. Убедитесь, что порт, к которому вы подключаетесь, совпадает с портом, на котором работает база данных. Если есть больше экземпляров сервера SQL, проверьте правильный.

Томас Кубес
источник
0

Все, что вам нужно сделать, это открыть соответствующий порт на брандмауэре сервера.

user1968210
источник
6
К сожалению, это не «все, что вам нужно сделать». Есть довольно много других шагов, которые необходимо предпринять, как указано в принятом ответе выше.
приветствие
2
На самом деле, в моем случае это БЫЛО все, что мне нужно было сделать, так что несправедливо уцененный и действительно полезный вклад.
MagicalArmchair
1
Для меня было исправлено добавление правила открытия порта 1433.
GiddyUpHorsey
Я думаю, что было бы справедливо сказать, что «многое должно быть согласовано, какие дополнительные шаги необходимы для вас, будет меняться»
Mordachai
Мне пришлось сделать все, что у Киралессы, Пита и этого, а также до того, как я смог получить Windows 10, обслуживающую SQL.
alfadog67
0

Возникли проблемы с подключением к SQL Server?

Попробуйте отключить брандмауэр.

Если вы можете соединиться с отключенным брандмауэром, возможно, вы пропустили некоторые правила ввода, такие как «sql service broker», добавьте эти правила ввода в ваш брандмауэр:

TCP ADMIN CONNECTION TCP PORT 1434

«SQL ADMIN CONNECTION» UDP-порт 1434

«СЕРВИС АНАЛИЗА SQL» TCP-ПОРТ 2383

«СЛУЖБА АНАЛИЗА SQL BROWSE» TCP-ПОРТ 2382

«SQL DEBUGGER / RPC» TCP PORT 135

«SQL SERVER» TCP PORT 1433 и другие, если у вас динамические порты

"SQL SERVICE BROKER" TCP-ПОРТ 4022

Пау Домингес
источник