Abilita connessioni remote per SQL Server Express 2012


403

Ho appena installato SQL Server Express 2012 sul mio server di casa. Sto provando a connettermi ad esso da Visual Studio 2012 dal mio PC desktop e ricevendo ripetutamente l'errore noto:

Si è verificato un errore relativo alla rete o specifico dell'istanza durante la creazione di una connessione a SQL Server. Il server non è stato trovato o non era accessibile. Verificare che il nome dell'istanza sia corretto e che SQL Server sia configurato per consentire connessioni remote. (provider: provider di tubi denominato, errore: 40 - Impossibile aprire una connessione a SQL Server)

Cosa ho fatto per provare a risolvere questo problema:

  • Eseguire Gestione configurazione SQL Server sul server e abilitare SQL Server Browser
  • Aggiungi un'eccezione di Windows Firewall sul server per TCP, porte 1433 e 1434 sulla sottorete locale.
  • Verifica di disporre di un accesso all'istanza di SQL Server per l'utente con cui ho effettuato l'accesso come sul desktop.
  • Verifica che sto utilizzando l'autenticazione di Windows nell'istanza di SQL Server.
  • Riavvia ripetutamente SQL Server e l'intero server dang.
  • Allontana tutti i capelli.

Come posso ottenere SQL Server 2012 Express per consentire connessioni remote !?


7
Ho risolto abilitando il servizio SQL Server Browser: D. Grazie per averlo pubblicato.
alansiqueira27,

1
Lo sblocco della porta UDP 1433 mi ha aiutato!
Michael,

1
E se stai usando una VM di Azure, non dimenticare di aprire anche la porta tramite il portale di gestione di Azure (che funge da firewall esterno per il firewall della VM ...). In questo modo: stackoverflow.com/questions/34251382/...
jleach

Per coloro che si chiedono dove sia scomparso Sql Server Configuration Manager nelle versioni più recenti,
vai

Risposte:


731

Bene, felice di averlo chiesto . La soluzione che ho finalmente scoperto era qui:

Come configuro SQL Server Express per consentire connessioni remote tcp / ip sulla porta 1433?

  1. Esegui Gestione configurazione SQL Server.
  2. Vai a Configurazione della rete di SQL Server> Protocolli per SQLEXPRESS.
  3. Assicurarsi che TCP / IP sia abilitato.

Finora, tutto bene e del tutto previsto. Ma allora:

  1. Fare clic con il tasto destro su TCP / IP e selezionare Proprietà .
  2. Verificare che, in IP2, l'indirizzo IP sia impostato sull'indirizzo IP del computer nella sottorete locale.
  3. Scorri verso il basso fino a IPAll.
  4. Assicurarsi che TCP Dynamic Ports sia vuoto . (Il mio era impostato su un numero di porta di 5 cifre.)
  5. Assicurarsi che la porta TCP sia impostata su 1433 . (Il mio era vuoto.)

(Inoltre, se segui questi passaggi, non è necessario abilitare il browser SQL Server e devi solo consentire la porta 1433, non 1434.)

Questi cinque passaggi aggiuntivi sono qualcosa che non ricordo di aver mai dovuto fare in una versione precedente di SQL Server, Express o altro. Sembrano essere stati necessari perché sto usando un'istanza denominata (myservername \ SQLEXPRESS) sul server anziché un'istanza predefinita. Vedere qui:

Configurare un server per l'ascolto su una porta TCP specifica (Gestione configurazione SQL Server)


7
Se SQL Server Express non è l'unica istanza, potrebbe essere necessario annullare la porta 1433 su altre istanze. Ho avuto un'istanza predefinita 2008 R2 (MSSQLSERVER) e l'unico modo per collegarmi a entrambi dall'esterno è quello di assegnare la porta 1433 all'istanza 2012 (come sopra) e modificare le assegnazioni delle porte per l'istanza predefinita precedente a TCP Dynamic Porte = "0" e Porta TCP = "" (vuoto). Farlo al contrario ha dato accesso solo all'istanza predefinita.
Robert Calhoun,

17
Quell'ambientazione IPAllera il consiglio SAVIOR! Il mio era come il tuo ...: D
Leniel Maccaferri il

18
Nel caso in cui aiuti qualcun altro ... questo ha aiutato, ma non ero ancora in grado di connettermi fino a quando non ho avviato il servizio SQL Server Browser. (Nota: per eseguire questa operazione ho dovuto accedere all'applicazione "Servizi" di Windows, poiché il tipo di avvio del servizio SQL Server Browser era "Disabilitato" per qualche motivo. Il tipo di avvio è stato modificato in "Automatico", avviato il servizio e quindi in grado di connettersi.)
mercuriale

9
Su Windows 8 e SQL 2012 Express SP1 installati sull'istanza SQLEXPRESS ho dovuto impostare le porte dinamiche su un valore diverso da quello vuoto (se lo hai eliminato, impostato su 0, calcolerà nuovamente una nuova porta casuale per te) E aprirò ENTRAMBI TCP 1433 e UDP 1434 regole della porta in entrata nel pannello di controllo del firewall avanzato. Quando le porte dinamiche erano vuote, SQL Server si bloccava all'avvio.
Tony Wall,

10
Volevo solo dire grazie e voto positivo. Mi hai risparmiato un sacco di tempo. Ti dispiace aggiornare il tuo post con la sintassi di connessione corretta? Devo usare myserver\sqlexpress,[portnumber]senza le parentesi. Notate che è ,e non:
Marco

105

Il modo corretto per connettersi a SQL Server remoto (senza aprire la porta UDP 1434 e abilitare SQL Server Browser) è utilizzare ip e porta invece dell'istanza denominata .

L'uso di ip e port invece dell'istanza denominata è anche più sicuro, in quanto riduce la superficie di attacco.

Forse 2 immagini parlano di 2000 parole ...

Questo metodo utilizza la porta specificata (questo è ciò che la maggior parte delle persone vuole credo) ..

inserisci qui la descrizione dell'immagine

Questo metodo richiede l'apertura della porta UDP 1434 e il browser SQL Server in esecuzione.

inserisci qui la descrizione dell'immagine


Puoi approfondire cosa intendi dicendo che questo è il modo "corretto" per farlo?
Ryan Lundy,

3
@Kyralessa Ha! ... ora che sono di nuovo sobrio dopo 4-5 ore di capelli che cercano di connettersi alla mia istanza remota, dovrei probabilmente spiegare che qui 'corretto' dovrebbe essere letto dal mio contesto. È "errato" connettersi utilizzando il nome dell'istanza poiché non ho abilitato SQL Server Browser.
Rosdi Kasim,

Ho aggiunto alcuni chiarimenti alla mia risposta per evitare incomprensioni.
Rosdi Kasim,

1
Grazie;) Quando non si ha accesso per eseguire il servizio browser, è necessario specificare la porta.
Arman McHitarian

3
più 1 per mostrare che MS usa la virgola anziché le colonne come separatore per il numero di porta
Jorj

32

Un'altra cosa...

Kyralessa fornisce ottime informazioni, ma ho un'altra cosa da aggiungere dove sono rimasto perplesso anche dopo questo articolo.

In Configurazione di rete di SQL Server> Protocolli per server> TCP / IP abilitato. Fare clic con il tasto destro su TCP / IP e selezionare Proprietà. In Indirizzi IP è necessario impostare Abilitato su Sì per ciascun tipo di connessione che si sta utilizzando.

inserisci qui la descrizione dell'immagine


18

Puoi usarlo per risolvere questo problema:

Vai a START> EXECUTE ed esegui CLICONFG.EXE.

Il protocollo Named Pipes sarà il primo dell'elenco, annotalo e promuovi TCP / IP.

Testare accuratamente l'applicazione.

Spero questo aiuto.


Wow, che gioiello ... grazie. Non ho mai saputo che esistesse.
Louis van Tonder,

1
Ciò configura il CLIENTE per l'uso di TCP / IP, non del server.
sig.

OMG, funziona !! ho appena effettuato l'accesso per votare questa risposta. grazie
Aki

15

Puoi anche impostare

Ascolta tutto su NO

nella finestra di dialogo del protocollo quindi nell'indirizzo IP IP1 (diciamo)

impostato abilitato su Sì,

definire il tuo indirizzo IP,

impostare TCP dinamico su Vuoto e

Porta TCP al 1433 (o qualsiasi altra cosa)


In questo modo su Windows 8.1 con SQL 2012 Express SP1 installato, SQL si è
bloccato

Ho impostato tutte le voci IP 1, 2, ... su abilitato + attivo, cancellato dinamico, cancellato, e ho impostato la porta IPAll su 1433, quindi ho dovuto aggiungere regole per aprire TCP 1433 e UPD 1434 nel firewall (1434 non è richiesto se non si utilizza il nome, ma solo il numero di porta).
Mordachai,


11

Ho avuto questo problema di recente. 2015 ago

Risolto aprendo Gestione configurazione SQL Server

  • Configurazione della rete di SQL Server -> Protocolli per SQLEXPRESS
  • Proprietà su TCP / IP -> scheda Indirizzi IP
  • Tutto rimane predefinito, impostare solo IPALL: Porta TCP su 1433

È possibile connettersi con SQL Server Manager alla macchina: [hostaddress], 1433

Esempio:

inserisci qui la descrizione dell'immagine


6

Nella mia installazione di SQL Server 2012 Developer Edition, installata con le impostazioni predefinite, dovevo solo caricare Gestione configurazione SQL Server -> Configurazione di rete SQL Server -> Protocolli per MSSQLSERVER e cambiare TCP / IP da Disabilitato ad Abilitato.


1
Nota veloce: per me questo non ha funzionato. L'IP sbagliato era lì per qualche motivo. Tuttavia, i passaggi di Kyralessa hanno funzionato da quando hanno inventato l'aggiornamento dell'IP.
Brian MacKay,

Questo funziona per uno dei miei server, ma non per l'altro.
cheny,

5

Ho dovuto aggiungere una regola della porta in entrata del firewall per aprire la porta UDP 1434. Questa è quella su cui il browser del server SQL è in ascolto.


3

Preferisco il modo di "Rosdi Kasim" in quanto non richiede la configurazione dettagliata sull'IP.

Lo dimenticherò sicuramente di nuovo quando proverò di nuovo ad installare un altro server.

Keep It Simple Stupid (KISS) semplicemente abilitando il servizio Sql Server Browser, quindi aggiungere \ SQLEXPRESS dietro l'IP quando si collega il server.

L'uso diretto dell'IP senza "\ SQLEXPRESS" è stato il mio punto di errore in quanto non utilizza la porta predefinita.

Grazie.


3

Ho avuto lo stesso problema con SQL Server 2014 istanza denominata installata localmente. La connessione usando il FQDN\InstanceNamefallirebbe, mentre la connessione usando solo il mio hostname\InstanceNamefunzionava. Ad esempio: connettersi usando ha mycomputername\sql2014funzionato, ma usando mycomputername.mydomain.org\sql2014no. DNS risolto correttamente, TCP / IP è stato abilitato in Gestione configurazione SQL, aggiunte le regole di Windows Firewall (e quindi disattivato il firewall per i test per assicurarsi che non stesse bloccando nulla), ma nessuno di questi ha risolto il problema.

Alla fine, ho dovuto avviare il servizio " SQL Server Browser " su SQL Server e questo ha risolto il problema di connettività.

Non mi ero mai reso conto che il servizio SQL Server Browser aiutava effettivamente SQL Server a stabilire connessioni; Ho avuto l'impressione che abbia semplicemente aiutato a popolare i menu a discesa quando hai fatto clic su "cerca altri" server a cui collegarti, ma in realtà aiuta ad allineare le richieste dei client con il numero di porta corretto da utilizzare, se il numero di porta non è assegnato in modo esplicito (simile al modo in cui i binding di siti Web aiutano ad alleviare lo stesso problema su un server Web IIS che ospita più siti Web).

Questo elemento di connessione è ciò che mi ha dato l'indizio sul servizio SQL Server Browser: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- nome

  • quando si utilizza wstst05 \ sqlexpress come nome del server, il codice client separa il nome della macchina dal nome dell'istanza e wstst05 viene confrontato con il nome netbios. Non vedo alcun problema per loro di abbinare e la connessione è considerata locale. Da lì, recuperiamo le informazioni necessarie SENZA contattare SQL Browser e ci colleghiamo all'istanza SQL tramite memoria condivisa senza alcun problema.
  • quando si utilizza wstst05.capatest.local \ sqlexpress, il codice client non confronta il nome (wstst05.capatest.local) con il nome netbios (wstst05) e considera la connessione "remota". Questo è di progettazione e prenderemo sicuramente in considerazione il miglioramento in futuro. Comunque, a causa della considerazione della connessione remota e del fatto che si tratta di un'istanza denominata, il client decide che è necessario utilizzare SQLBrowser per la risoluzione dei nomi. Tenta di contattare il browser SQL su wstst05.capatest.local (porta UDP 1434) e apparentemente quella parte fallisce. Da qui l'errore che si ottiene.

Il motivo del servizio "SQL Server Browser" di TechNet (enfasi aggiunta da me): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx

Dalla sezione "Utilizzo del browser SQL Server":

Se il servizio SQL Server Browser non è in esecuzione, è comunque possibile connettersi a SQL Server se si fornisce il numero di porta corretto o la pipe denominata. Ad esempio, è possibile connettersi all'istanza predefinita di SQL Server con TCP / IP se è in esecuzione sulla porta 1433. Tuttavia, se il servizio SQL Server Browser non è in esecuzione, le seguenti connessioni non funzionano :

  • Qualsiasi componente che tenta di connettersi a un'istanza denominata senza specificare completamente tutti i parametri (come la porta TCP / IP o la pipe denominata) .
  • Qualsiasi componente che genera o trasmette informazioni server / istanza che potrebbero essere successivamente utilizzate da altri componenti per riconnettersi.
  • Connessione a un'istanza denominata senza fornire il numero di porta o la pipe.
  • DAC a un'istanza denominata o all'istanza predefinita se non si utilizza la porta TCP / IP 1433.
  • Il servizio di redirector OLAP.
  • Enumerazione dei server in SQL Server Management Studio, Enterprise Manager o Query Analyzer.

Se si utilizza SQL Server in uno scenario client-server (ad esempio, quando l'applicazione accede a SQL Server attraverso una rete), se si interrompe o si disabilita il servizio SQL Server Browser, è necessario assegnare un numero di porta specifico a ciascuna istanza e scrivere il codice dell'applicazione client per utilizzare sempre quel numero di porta. Questo approccio presenta i seguenti problemi :

  • È necessario aggiornare e gestire il codice dell'applicazione client per assicurarsi che si connetta alla porta corretta.
  • La porta scelta per ciascuna istanza può essere utilizzata da un altro servizio o applicazione sul server, rendendo l'istanza di SQL Server non disponibile.

E altre informazioni dallo stesso articolo della sezione "Funzionamento del browser SQL Server":

Perché solo un'istanza di SQL Server può utilizzare una porta o una pipe, vengono assegnati numeri di porta e nomi di pipe diversi per le istanze denominate, incluso SQL Server Express. Per impostazione predefinita, quando abilitato, entrambe le istanze denominate e SQL Server Express sono configurate per utilizzare porte dinamiche, ovvero una porta disponibile viene assegnata all'avvio di SQL Server. Se lo si desidera, è possibile assegnare una porta specifica a un'istanza di SQL Server. Durante la connessione, i client possono specificare una porta specifica; ma se la porta viene assegnata in modo dinamico, il numero di porta può cambiare ogni volta che si riavvia SQL Server, quindi il numero di porta corretto è sconosciuto al client. ... Quando i client SQL Server richiedono risorse SQL Server, la libreria di rete client invia un messaggio UDP al server utilizzando la porta 1434. SQL Server Browser risponde con la porta TCP / IP o la pipe denominata dell'istanza richiesta.


2

Ho dovuto aggiungere la porta tramite Configuration Manager e aggiungere il numero di porta nella mia connessione sql [host] \ [nome istanza db], 1433

Nota, (virgola) tra instancename e port


1

Ho avuto un problema diverso da quello che tutte le risposte finora menzionate!

Dovrei iniziare dicendo che ce l'avevo in Visual Studio e non in SQL Server Express, ma la soluzione dovrebbe essere esattamente la stessa.

Bene, dio, in realtà è davvero semplice e forse un po 'sciocco. Quando ho provato a creare un database e Visual Studio mi ha suggerito il nome di SQL Server, mi ha dato il mio nome utente di Windows e dato che in realtà è il nome del server, ci sono andato.

In realtà era il mio nome utente Windows + \SQLEXPRESS. Se non hai modificato alcuna impostazione, probabilmente è anche la tua. Se funziona, smetti di leggere; questa è la mia risposta Se non funziona, forse il nome è diverso.

Se, come me, hai riscontrato questo problema in Visual Studio solo per verificare qual è il tuo, procedi nel seguente modo:

  1. Apri l' icona di SQL Server Management Studio .
  2. Se non vedi il tuo server (agganciato a sinistra per impostazione predefinita) premi F8o vai su Visualizza -> Esplora oggetti .
  3. Fare clic con il tasto destro sul nome del server e selezionare Proprietà (L'ultimo elemento)
  4. In basso a sinistra puoi vedere il nome reale del tuo server sotto " Server " (non Connessione, ma sopra di esso).

Questo è il nome del server e questo è ciò a cui dovresti provare a connetterti! non quello che suggerisce Visual Studio!



1

Nel mio caso il database era in esecuzione su una porta non standard. Verificare che la porta a cui ci si sta connettendo sia la stessa porta su cui è in esecuzione il database. Se ci sono più istanze di SQL Server, controlla quella corretta.


0

Tutto quello che devi fare è aprire la porta pertinente sul firewall del server.


6
Sfortunatamente, non è "tutto ciò che devi fare". Ci sono alcuni altri passaggi che devono essere presi, come indicato nella risposta accettata sopra.
salse

2
In realtà, nel mio caso questo era tutto ciò che dovevo fare, quindi ingiustamente ridotto e input effettivamente utili.
MagicalArmchair

1
L'aggiunta di una regola per aprire la porta 1433 è stata ciò che l'ha risolto per me.
GiddyUpHorsey

Penso che sia giusto dire "molte cose devono essere in linea, quali passi aggiuntivi sono necessari per te varieranno"
Mordachai

Ho dovuto fare tutto quello di Kyralessa, Pete e anche questo prima di riuscire a far funzionare Windows 10 con SQL.
alfadog67,

0

Problemi con la connessione a SQL Server?

Prova a disconnettere il firewall.

Se riesci a connetterti con un firewall disconnesso, potresti non avere alcune regole di input come "broker di servizi sql", aggiungi queste regole di input al tuo firewall:

PORTA TCP 1434 "SQL ADMIN CONNECTION"

"SQL ADMIN CONNECTION" UDP PORT 1434

PORTA TCP 2383 "SERVIZIO ANALISI SQL"

PORTA TCP 2382 "SQL BROWSE ANALYSIS SERVICE"

PORTA TCP "SQL DEBUGGER / RPC" 135

"SQL SERVER" TCP PORT 1433 e altri se si dispone di porte dinamiche

PORTA TCP 4022 "SQL SERVICE BROKER"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.