Włącz połączenia zdalne dla SQL Server Express 2012

403

Właśnie zainstalowałem SQL Server Express 2012 na moim serwerze domowym. Próbuję połączyć się z nim z programu Visual Studio 2012 z komputera stacjonarnego i wielokrotnie otrzymuję znany błąd:

Wystąpił błąd związany z siecią lub specyficzny dla wystąpienia podczas ustanawiania połączenia z programem SQL Server. Serwer nie został znaleziony lub był niedostępny. Sprawdź, czy nazwa instancji jest poprawna i czy SQL Server jest skonfigurowany do zezwalania na połączenia zdalne. (dostawca: Dostawca nazwanych potoków, błąd: 40 - Nie można otworzyć połączenia z programem SQL Server)

Co zrobiłem, aby spróbować to naprawić:

  • Uruchom SQL Server Configuration Manager na serwerze i włącz SQL Server Browser
  • Dodaj wyjątek Zapory systemu Windows na serwerze dla TCP, porty 1433 i 1434 w lokalnej podsieci.
  • Sprawdź, czy mam login do instancji SQL Server dla zalogowanego użytkownika na pulpicie.
  • Sprawdź, czy korzystam z uwierzytelniania systemu Windows w wystąpieniu programu SQL Server.
  • Wielokrotnie uruchom ponownie SQL Server i cały serwer Dang.
  • Wyciągnij wszystkie moje włosy.

Jak mogę uzyskać SQL Server 2012 Express zezwalający na połączenia zdalne !?

Ryan Lundy
źródło
7
Rozwiązałem, włączając usługę SQL Server Browser: D. Dzięki za opublikowanie.
alansiqueira27
1
Odblokowanie portu 1433 UDP pomogło mi!
Michael
1
A jeśli używasz maszyny wirtualnej platformy Azure, nie zapomnij również otworzyć portu za pośrednictwem portalu zarządzania platformy Azure (która działa jako zewnętrzna zapora sieciowa dla własnej zapory maszyny wirtualnej ...). W ten sposób: stackoverflow.com/questions/34251382/...
jleach
Jeśli zastanawiasz się, gdzie zniknął Sql Server Configuration Manager w nowszych wersjach,
zajrzyj

Odpowiedzi:

731

Cieszę się , że zapytałem . Rozwiązanie, które w końcu odkryłem, było tutaj:

Jak skonfigurować program SQL Server Express, aby zezwalał na zdalne połączenia TCP / IP na porcie 1433?

  1. Uruchom program SQL Server Configuration Manager.
  2. Przejdź do SQL Server Network Configuration> Protocols for SQLEXPRESS.
  3. Upewnij się, że protokół TCP / IP jest włączony.

Do tej pory tak dobre i całkowicie oczekiwane. Ale wtedy:

  1. Kliknij prawym przyciskiem myszy TCP / IP i wybierz Właściwości .
  2. Sprawdź, czy w obszarze IP2 adres IP jest ustawiony na adres IP komputera w lokalnej podsieci.
  3. Przewiń w dół do IPAll.
  4. Upewnij się, że dynamiczne porty TCPpuste . (Mój ustawiono na 5-cyfrowy numer portu).
  5. Upewnij się, że port TCP jest ustawiony na 1433 . (Mój był pusty.)

(Ponadto, jeśli następujące kroki, to nie konieczne, aby umożliwić SQL Server Browser, i trzeba tylko pozwolić port 1433, a nie 1434)

Te dodatkowe pięć kroków to coś, czego nie pamiętam, że kiedykolwiek musiałem zrobić w poprzedniej wersji SQL Server, Express lub w inny sposób. Wydają się być konieczne, ponieważ używam nazwanego wystąpienia (moja nazwa_serwera \ SQLEXPRESS) na serwerze zamiast wystąpienia domyślnego. Spójrz tutaj:

Skonfiguruj serwer do nasłuchiwania na określonym porcie TCP (Menedżer konfiguracji programu SQL Server)

Ryan Lundy
źródło
7
Jeśli SQL Server Express nie jest jedyną instancją, może być konieczne UNASSIGN portu 1433 w innych instancjach. Miałem domyślną instancję 2008 R2 (MSSQLSERVER), a jedynym sposobem na połączenie się z nimi z zewnątrz jest przypisanie portu 1433 do instancji 2012 (powyżej) i zmiana przypisań portów dla starszej domyślnej instancji na TCP Dynamic Porty = „0” i port TCP = „” (puste). Wykonanie tego na odwrót umożliwiło dostęp tylko do domyślnej instancji.
Robert Calhoun,
17
To IPAllustawienie było ZBAWICIELEM! Mój był jak twój ...: D
Leniel Maccaferri,
18
W przypadku, gdy pomaga komukolwiek innemu ... to pomogło, ale nadal nie mogłem się połączyć, dopóki nie uruchomiłem usługi przeglądarki SQL Server. (Uwaga: w tym celu musiałem przejść do aplikacji „Usługi” systemu Windows, ponieważ typ uruchamiania usługi przeglądarki SQL Server był z jakiegoś powodu „Wyłączony”. Zmieniłem typ uruchamiania na „Automatyczny”, uruchomiłem usługę, a następnie w stanie się połączyć.)
mercurial,
9
W systemach Windows 8 i SQL 2012 Express SP1 zainstalowanych w instancji SQLEXPRESS musiałem ustawić porty dynamiczne na dowolne inne niż puste (jeśli je usunąłeś, ustaw na 0, wówczas ponownie obliczy dla ciebie nowy losowy port) ORAZ otworzyłem OBA TCP Reguły portów przychodzących 1433 i UDP 1434 w panelu sterowania Advanced Firewall. Gdy porty dynamiczne były puste, program SQL Server po prostu zawiesił się podczas uruchamiania.
Tony Wall
10
Chciałem tylko podziękować i pochwalić. Zaoszczędziłeś mi dużo czasu. Czy masz coś przeciwko aktualizacji swojego postu za pomocą poprawnej składni połączenia? Muszę użyć myserver\sqlexpress,[portnumber]bez nawiasów. Zauważ, że tak jest ,i nie:
Marco
105

Prawidłowym sposobem połączenia ze zdalnym programem SQL Server (bez otwierania portu UDP 1434 i włączania przeglądarki SQL Server) jest użycie adresu ip i portu zamiast nazwanego wystąpienia .

Używanie adresu ip i portu zamiast nazwanego wystąpienia jest również bezpieczniejsze, ponieważ zmniejsza obszar ataku.

Być może 2 zdjęcia mówią 2000 słów ...

Ta metoda używa określonego portu (tak wierzy większość ludzi).

wprowadź opis zdjęcia tutaj

Ta metoda wymaga otwarcia portu UDP 1434 i uruchomionej przeglądarki SQL Server.

wprowadź opis zdjęcia tutaj

Rosdi Kasim
źródło
Czy potrafisz wyjaśnić, co masz na myśli mówiąc, że jest to „właściwy” sposób na zrobienie tego?
Ryan Lundy
3
@ Kyralessa Ha! ... teraz, gdy znów jestem trzeźwy po 4-5 godzinach ciągnięcia za włosy, próbując połączyć się z moją zdalną instancją, prawdopodobnie powinienem wyjaśnić, że „poprawne” tutaj należy czytać z mojego kontekstu. Nawiązywanie połączenia przy użyciu nazwy instancji jest „nieprawidłowe”, ponieważ nie włączyłem przeglądarki SQL Server.
Rosdi Kasim
Do mojej odpowiedzi dodałem wyjaśnienia, aby uniknąć nieporozumień.
Rosdi Kasim
1
Dzięki;) Jeśli nie masz dostępu do uruchomienia usługi przeglądarki, musisz określić port.
Arman McHitarian
3
plus 1 za wykazanie, że MS używa przecinka zamiast kolumn jako separatora numeru portu
Jorj
32

Jeszcze jedna rzecz...

Kyralessa dostarcza świetnych informacji, ale mam jeszcze jedną rzecz do dodania, gdzie byłem zaskoczony nawet po tym artykule.

W obszarze Konfiguracja sieci programu SQL Server> Protokoły dla serwera> Włączone TCP / IP. Kliknij prawym przyciskiem myszy TCP / IP i wybierz właściwości. W obszarze Adresy IP należy ustawić opcję Włączone na Tak dla każdego używanego typu połączenia.

wprowadź opis zdjęcia tutaj

Pete
źródło
18

Możesz użyć tego do rozwiązania tego problemu:

Przejdź do START> WYKONAJ i uruchom CLICONFG.EXE.

Protokół Nazwane potoki będzie pierwszy na liście. Zdemontuj go i promuj TCP / IP.

Dokładnie przetestuj aplikację.

Mam nadzieję, że ta pomoc.

Ageu
źródło
Wow, co za klejnot ... dzięki. Nigdy nie wiedziałem, że nawet istnieje.
Louis van Tonder
1
To konfiguruje KLIENTA do używania TCP / IP, a nie serwera.
mcr
OMG, działa !! właśnie się zalogowałem, aby zagłosować na tę odpowiedź. dzięki
Aki
15

Możesz także ustawić

Słuchaj wszystkich na NIE

w oknie dialogowym protokołu, a następnie w adresie IP IP1 (powiedzmy)

ustawiono włączone na Tak,

zdefiniuj swój adres IP,

ustaw Dynamiczny TCP na Pusty i

Port TCP do 1433 (lub cokolwiek)

johnroster
źródło
Wykonanie tego w systemie Windows 8.1 z zainstalowanym
programem
Ustawiłem wszystkie wpisy IP 1, 2, ... na włączony + aktywny, wymazany dynamiczny, skasowany port, i ustawiłem port IPAll na 1433, a następnie musiałem dodać reguły otwierające TCP 1433 i UPD 1434 w zaporze ogniowej (1434 nie jest wymagane, jeśli nie używa się nazwy, ale tylko numer portu).
Mordachai
11

Ten artykuł pomógł mi ...

Jak włączyć połączenia zdalne w programie SQL Server

Wszystko w SQL Server zostało skonfigurowane, mój problem polegał na tym, że zapora blokowała port 1433

JGilmartin
źródło
Wszyscy wiedzą lub łatwo spotykają konfigurację dozwolonych portów Azure. Nie przyszło mi do głowy, że port może być blokowany przez zaporę wirtualną WINDOWS VM. Dzięki. + 1
2b77bee6-5445-4c77-b1eb-4df3e5
11

Ostatnio miałem ten problem. 2015 sierpnia

Rozwiązany przez otwarcie SQL Server Configuration Manager

  • Konfiguracja sieciowa SQL Server -> Protokoły dla SQLEXPRESS
  • Właściwości na karcie TCP / IP -> Adresy IP
  • Wszystko pozostaje domyślne, ustaw tylko IPALL: Port TCP na 1433

Można połączyć się z programem SQL Server Manager do komputera: [adres hosta], 1433

Przykład:

wprowadź opis zdjęcia tutaj

DDan
źródło
6

Podczas mojej instalacji SQL Server 2012 Developer Edition, zainstalowanej z ustawieniami domyślnymi, musiałem tylko załadować SQL Server Configuration Manager -> Konfiguracja sieciowa SQL Server -> Protokoły dla MSSQLSERVER i zmienić TCP / IP z Wyłączone na Włączone.

Phil
źródło
1
Szybka uwaga: dla mnie to nie zadziałało. Z jakiegoś powodu było tam nieprawidłowe IP. Jednak kroki Kyralessy załatwiły sprawę, ponieważ zaatakowały aktualizację adresu IP.
Brian MacKay,
Działa to na jednym z moich serwerów, ale nie na drugim.
cheny
5

Musiałem dodać regułę portu przychodzącego zapory, aby otworzyć port UDP 1434. To jest ta, na której nasłuchuje przeglądarka serwerów Sql.

Tom Redfern
źródło
3

Wolę sposób „Rosdi Kasim”, ponieważ nie wymaga to szczegółowej konfiguracji adresu IP.

Z pewnością zapomnę o tym ponownie, gdy spróbuję ponownie uruchomić inny serwer.

Keep It Simple Stupid (KISS), po prostu włącz usługę Sql Server Browser, a następnie dodaj \ SQLEXPRESS za adresem IP podczas podłączania serwera.

Bezpośrednie użycie adresu IP bez „\ SQLEXPRESS” było moim punktem niepowodzenia, ponieważ nie używa domyślnego portu.

Dzięki.

Obcy
źródło
3

Miałem ten sam problem z lokalnie nazwaną instancją SQL Server 2014. Połączenie za pomocą FQDN\InstanceNamenie powiedzie się, a połączenie przy użyciu tylko mojego hostname\InstanceNamedziałało. Na przykład: łączenie przy użyciu mycomputername\sql2014działało, ale przy użyciu mycomputername.mydomain.org\sql2014nie. DNS został poprawnie rozwiązany, protokół TCP / IP został włączony w Menedżerze konfiguracji SQL, dodano reguły Zapory systemu Windows (a następnie wyłączono zaporę do testowania, aby upewnić się, że niczego nie blokuje), ale żadna z nich nie rozwiązała problemu.

Wreszcie musiałem uruchomić usługę „ SQL Server Browser ” na SQL Server i to rozwiązało problem z łącznością.

Nigdy nie zdawałem sobie sprawy, że usługa przeglądarki SQL Server faktycznie pomagała SQL Serverowi w nawiązywaniu połączeń; Miałem wrażenie, że po prostu pomógł wypełnić listy rozwijane, kiedy kliknąłeś „Przeglądaj więcej” serwerów, z którymi chcesz się połączyć, ale tak naprawdę pomaga wyrównać żądania klientów z poprawnym numerem portu do użycia, jeśli numer portu nie jest jawnie przypisany (podobne w jaki sposób powiązania witryn pomagają złagodzić ten sam problem na serwerze sieci Web IIS obsługującym wiele witryn).

Ten element połączenia dał mi wskazówkę dotyczącą usługi przeglądarki SQL Server: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- imię

  • gdy używasz wstst05 \ sqlexpress jako nazwy serwera, kod klienta oddziela nazwę komputera od nazwy instancji, a wstst05 jest porównywany z nazwą netbios. Nie widzę dla nich żadnego problemu, a połączenie jest uważane za lokalne. Stamtąd pobieramy potrzebne informacje BEZ kontaktowania się z przeglądarką SQL i bez problemu łączymy się z instancją SQL za pośrednictwem pamięci współużytkowanej.
  • gdy używasz wstst05.capatest.local \ sqlexpress, kod klienta nie porównuje nazwy (wstst05.capatest.local) z nazwą netbios (wstst05) i uznaje połączenie za „zdalne”. Jest to zgodne z projektem i na pewno rozważymy ulepszenie tego w przyszłości. W każdym razie, ze względu na rozpatrzenie połączenia zdalnego i fakt, że jest to nazwane wystąpienie, klient decyduje, że musi użyć SQLBrowser do rozpoznawania nazw. Próbuje skontaktować się z przeglądarką SQL na wstst05.capatest.local (port UDP 1434) i najwyraźniej ta część zawiedzie. Stąd otrzymany błąd.

Przyczyna usługi „SQL Server Browser” od TechNet (podkreślenie dodane przeze mnie): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx

Z sekcji „Korzystanie z przeglądarki SQL Server”:

Jeśli usługa przeglądarki SQL Server nie jest uruchomiona, nadal możesz połączyć się z SQL Server, jeśli podasz poprawny numer portu lub nazwany potok. Na przykład możesz połączyć się z domyślnym wystąpieniem programu SQL Server za pomocą protokołu TCP / IP, jeśli jest on uruchomiony na porcie 1433. Jeśli jednak usługa przeglądarki SQL Server nie jest uruchomiona, następujące połączenia nie działają :

  • Każdy komponent, który próbuje połączyć się z nazwaną instancją bez pełnego określenia wszystkich parametrów (takich jak port TCP / IP lub nazwany potok) .
  • Każdy komponent, który generuje lub przekazuje informacje o serwerze \ instancji, które mogą być później wykorzystane przez inne komponenty do ponownego połączenia.
  • Łączenie z nazwaną instancją bez podawania numeru portu lub potoku.
  • DAC do instancji nazwanej lub instancji domyślnej, jeśli nie używa portu 1433 protokołu TCP / IP.
  • Usługa przekierowania OLAP.
  • Wyliczanie serwerów w SQL Server Management Studio, Enterprise Manager lub Query Analyzer.

Jeśli używasz programu SQL Server w scenariuszu klient-serwer (na przykład, gdy twoja aplikacja uzyskuje dostęp do programu SQL Server przez sieć), jeśli zatrzymasz lub wyłączysz usługę przeglądarki SQL Server, musisz przypisać określony numer portu do każdej instancji i napisz kod aplikacji klienta, aby zawsze używał tego numeru portu. Podejście to ma następujące problemy :

  • Należy zaktualizować i utrzymywać kod aplikacji klienckiej, aby upewnić się, że łączy się z odpowiednim portem.
  • Port wybrany dla każdej instancji może być używany przez inną usługę lub aplikację na serwerze, co powoduje, że instancja SQL Server jest niedostępna.

I więcej informacji z tego samego artykułu z sekcji „Jak działa przeglądarka SQL Server”:

Ponieważ tylko jedna instancja SQL Server może używać portu lub potoku, dla nazwanych wystąpień są przypisywane różne numery portów i nazwy potoków, w tym SQL Server Express. Domyślnie po włączeniu zarówno nazwane instancje, jak i SQL Server Express są skonfigurowane do korzystania z portów dynamicznych, to znaczy, dostępny port jest przydzielany podczas uruchamiania SQL Server. Jeśli chcesz, konkretny port można przypisać do wystąpienia programu SQL Server. Podczas łączenia klienci mogą określić konkretny port; ale jeśli port jest przypisywany dynamicznie, numer portu może ulec zmianie za każdym razem, gdy SQL Server zostanie zrestartowany, więc poprawny numer portu jest nieznany klientowi. ... Gdy klienci SQL Server żądają zasobów SQL Server, biblioteka sieciowa klienta wysyła komunikat UDP do serwera za pomocą portu 1434. Przeglądarka SQL Server odpowiada portem TCP / IP lub nazwanym potokiem żądanej instancji.

BateTech
źródło
2

Musiałem dodać port za pomocą programu Menedżer konfiguracji i dodać numer portu w moim połączeniu sql [host] \ [nazwa instancji db], 1433

Zwróć uwagę na (przecinek) między instancename a port

dynamiclynk
źródło
1

Miałem inny problem niż wszystkie dotychczas wspomniane odpowiedzi!

Powinienem zacząć od stwierdzenia, że ​​miałem go w Visual Studio, a nie SQL Server Express, ale rozwiązanie powinno być dokładnie takie samo.

Boże, to naprawdę bardzo proste i może trochę głupie. Kiedy próbowałem utworzyć bazę danych, a Visual Studio zasugerowało nazwę SQL Servera, podał mi moją nazwę użytkownika Windows, a ponieważ jest to nazwa serwera, wybrałem ją.

W rzeczywistości była to moja nazwa użytkownika systemu Windows + \SQLEXPRESS. Jeśli nie zmieniłeś żadnych ustawień, prawdopodobnie jest to również twoje. Jeśli to działa, przestań czytać; to moja odpowiedź. Jeśli to nie działa, może nazwa jest inna.

Jeśli, podobnie jak ja, miałeś tylko ten problem w Visual Studio, aby sprawdzić, który jest twój, wykonaj następujące kroki:

  1. Otwórz ikonę SQL Server Management Studio .
  2. Jeśli nie widzisz swojego serwera (domyślnie zadokowany po lewej), naciśnij F8lub przejdź do Widok -> Eksplorator obiektów .
  3. Kliknij prawym przyciskiem myszy nazwę serwera i wybierz Właściwości (ostatni element)
  4. W lewym dolnym rogu możesz zobaczyć rzeczywistą nazwę swojego serwera w zakładce „ Serwer ” (nie Połączenie, ale nad nim).

To jest nazwa serwera i z tym powinieneś spróbować się połączyć! nie to, co sugeruje Visual Studio!

MasterMastic
źródło
1

Jeszcze jedną rzeczą do sprawdzenia jest poprawne przeliterowanie nazwanego wystąpienia!

Ten artykuł jest bardzo pomocny w rozwiązywaniu problemów z połączeniem: Jak rozwiązywać problemy z łączeniem się z aparatem bazy danych SQL Server

Matt Burrell
źródło
1

W moim przypadku baza danych działała na niestandardowym porcie. Sprawdź, czy port, z którym się łączysz, jest taki sam, jak port, na którym działa baza danych. Jeśli jest więcej wystąpień serwera SQL, sprawdź poprawny.

Tomas Kubes
źródło
0

Wszystko, co musisz zrobić, to otworzyć odpowiedni port w zaporze ogniowej serwera.

użytkownik1968210
źródło
6
Niestety nie jest to „wszystko, co musisz zrobić”. Istnieje wiele innych kroków, które należy podjąć, zgodnie z powyższą odpowiedzią.
saluce
2
Właściwie w moim przypadku było to wszystko, co musiałem zrobić, tak niesprawiedliwie zaznaczone i faktycznie użyteczne dane wejściowe.
MagicalArmchair
1
Naprawiłem to, dodając regułę do otwierania portu 1433.
GiddyUpHorsey
Myślę, że to sprawiedliwe, aby powiedzieć „wiele rzeczy musi być w porządku, jakie dodatkowe kroki są konieczne, aby się różnić”
Mordachai
Musiałem zrobić wszystkie Kyralessę, Pete'a i tę, zanim mogłem uzyskać Windows 10 obsługujący SQL.
alfadog67
0

Masz problemy z połączeniem z SQL Server?

Spróbuj odłączyć zaporę.

Jeśli możesz połączyć się z odłączoną zaporą, być może brakuje Ci niektórych reguł wprowadzania, takich jak „broker usług sql”, dodaj te reguły do ​​zapory:

„POŁĄCZENIE ADMINISTRATORA SQL” PORT TCP 1434

„SQL ADMIN CONNECTION” UDP PORT 1434

„USŁUGA ANALIZY SQL” PORT TCP 2383

PORT „PRZEGLĄDAJ ANALIZĘ SQL” PORT TCP 2382

„SQL DEBUGGER / RPC” TCP PORT 135

„SQL SERVER” TCP PORT 1433 i inne, jeśli masz porty dynamiczne

„BROKER USŁUG SQL” PORT TCP 4022

Pau Dominguez
źródło