Habilitar conexiones remotas para SQL Server Express 2012

403

Acabo de instalar SQL Server Express 2012 en mi servidor doméstico. Estoy tratando de conectarme a él desde Visual Studio 2012 desde mi PC de escritorio, y repetidamente obtengo el conocido error:

Se produjo un error relacionado con la red o específico de la instancia al establecer una conexión con SQL Server. El servidor no se encontró o no estaba accesible. Verifique que el nombre de la instancia sea correcto y que SQL Server esté configurado para permitir conexiones remotas. (proveedor: proveedor de canalizaciones con nombre, error: 40 - No se pudo abrir una conexión a SQL Server)

Lo que he hecho para intentar solucionar esto:

  • Ejecute el Administrador de configuración de SQL Server en el servidor y habilite el Explorador de SQL Server
  • Agregue una excepción de Firewall de Windows en el servidor para TCP, los puertos 1433 y 1434 en la subred local.
  • Verifique que tengo un inicio de sesión en la instancia de SQL Server para el usuario con el que he iniciado sesión como en el escritorio.
  • Verifique que estoy usando la autenticación de Windows en la instancia de SQL Server.
  • Reinicie repetidamente SQL Server y todo el servidor dang.
  • Saca todo mi cabello.

¿Cómo puedo obtener SQL Server 2012 Express para permitir conexiones remotas?

Ryan Lundy
fuente
77
Resolví habilitando el servicio del navegador SQL Server: D. Gracias por publicarlo.
alansiqueira27
1
¡Desbloquear el puerto UDP 1433 me ayudó!
Michael
1
Y si está utilizando una máquina virtual de Azure, no olvide abrir el puerto también a través del portal de administración de Azure (que actúa como un firewall externo para el propio firewall de la VM ...). Así: stackoverflow.com/questions/34251382/…
jleach
Para aquellos que se preguntan dónde ha desaparecido Sql Server Configuration Manager en las versiones más nuevas, diríjase aquí
StuartLC el

Respuestas:

731

Bueno, me alegro de haberlo preguntado . La solución que finalmente descubrí estaba aquí:

¿Cómo configuro SQL Server Express para permitir conexiones remotas tcp / ip en el puerto 1433?

  1. Ejecute el Administrador de configuración de SQL Server.
  2. Vaya a Configuración de red de SQL Server> Protocolos para SQLEXPRESS.
  3. Asegúrese de que TCP / IP esté habilitado.

Hasta ahora, todo bien y completamente esperado. Pero entonces:

  1. Haga clic derecho en TCP / IP y seleccione Propiedades .
  2. Verifique que, bajo IP2, la Dirección IP esté configurada en la dirección IP de la computadora en la subred local.
  3. Desplácese hacia abajo hasta IPAll.
  4. Asegúrese de que Puertos dinámicos TCP es blanco . (El mío se configuró con un número de puerto de 5 dígitos).
  5. Asegúrese de que el puerto TCP esté configurado en 1433 . (El mío estaba en blanco)

(También, si usted sigue estos pasos, es que no es necesario para permitir Explorador de SQL Server, y sólo es necesario para permitir el puerto 1433, no 1434.)

Estos cinco pasos adicionales son algo que no recuerdo haber tenido que hacer en una versión anterior de SQL Server, Express o de otro tipo. Parecen haber sido necesarios porque estoy usando una instancia con nombre (myservername \ SQLEXPRESS) en el servidor en lugar de una instancia predeterminada. Mira aquí:

Configure un servidor para escuchar en un puerto TCP específico (Administrador de configuración de SQL Server)

Ryan Lundy
fuente
77
Si SQL Server Express no es la única instancia, podría ser necesario DESASIGNAR el puerto 1433 en otras instancias. Tenía una instancia predeterminada de 2008 R2 (MSSQLSERVER), y la única forma en que puedo conectarme a ambos desde afuera es asignar el puerto 1433 a la instancia de 2012 (según lo anterior) y cambiar las asignaciones de puerto para la instancia predeterminada más antigua a TCP Dinámico Puertos = "0" y Puerto TCP = "" (en blanco). Hacerlo al revés dio acceso solo a la instancia predeterminada.
Robert Calhoun
17
¡Esa IPAllconfiguración fue el consejo de SALVADOR! El mío era como el tuyo ...: D
Leniel Maccaferri
18
En caso de que ayude a alguien más ... esto ayudó, pero todavía no pude conectarme hasta que comencé el servicio del navegador SQL Server. (Nota: tuve que ingresar a la aplicación de "Servicios" de Windows para hacer esto, porque el tipo de inicio del servicio del Navegador SQL Server fue "Desactivado" por alguna razón. Cambié el Tipo de inicio a "Automático", inició el servicio y luego fue capaz de conectarse.)
mercurial
99
En Windows 8 y SQL 2012 Express SP1 instalados en la instancia de SQLEXPRESS, tuve que establecer puertos dinámicos en cualquier cosa que no sea en blanco (si lo eliminó, configúrelo en 0, entonces volverá a calcular un nuevo puerto aleatorio para usted) Y también abrir AMBOS TCP 1433 y UDP 1434 reglas de puertos entrantes en el panel de control de Firewall avanzado. Cuando los puertos dinámicos estaban en blanco, el Servidor SQL simplemente se bloqueaba al inicio.
Tony Wall
10
Solo quería decir gracias y votar. Me salvaste mucho tiempo. ¿Te importaría actualizar tu publicación con la sintaxis de conexión correcta? Necesito usar myserver\sqlexpress,[portnumber]sin los soportes. Tenga en cuenta que es ,y no:
Marco
105

La forma correcta de conectarse al servidor SQL remoto (sin abrir el puerto UDP 1434 y habilitar el navegador SQL Server) es usar ip y puerto en lugar de una instancia con nombre .

Usar ip y port en lugar de una instancia con nombre también es más seguro, ya que reduce el área de superficie de ataque.

Quizás 2 imágenes hablan 2000 palabras ...

Este método utiliza el puerto especificado (esto es lo que la mayoría de la gente quiere, creo).

ingrese la descripción de la imagen aquí

Este método requiere abrir el puerto UDP 1434 y ejecutar el navegador SQL Server.

ingrese la descripción de la imagen aquí

Rosdi Kasim
fuente
¿Puedes dar más detalles sobre lo que quieres decir diciendo que esta es la forma "correcta" de hacerlo?
Ryan Lundy
3
@ Kyralessa ¡Ja! ... ahora que estoy sobrio nuevamente después de 4-5 horas de arrancarme el pelo tratando de conectarme a mi instancia remota, probablemente debería explicar que 'correcto' aquí debe leerse desde mi contexto. Es 'incorrecto' conectarse usando el nombre de la instancia ya que no habilité el navegador SQL Server.
Rosdi Kasim
He agregado algunas aclaraciones a mi respuesta para evitar malentendidos.
Rosdi Kasim
1
Gracias;) Cuando no tiene acceso para ejecutar el servicio del navegador, debe especificar el puerto.
Arman McHitarian
3
más 1 por mostrar que MS usa comas en lugar de columnas como separador para el número de puerto
Jorj
32

Una cosa más...

Kyralessa proporciona gran información, pero tengo otra cosa que agregar donde me quedé perplejo incluso después de este artículo.

En Configuración de red de SQL Server> Protocolos para servidor> TCP / IP habilitado. Haga clic derecho en TCP / IP y elija propiedades. En las Direcciones IP, debe establecer Activado en Sí para cada tipo de conexión que esté utilizando.

ingrese la descripción de la imagen aquí

Pete
fuente
18

Puede usar esto para resolver este problema:

Vaya a INICIO> EJECUTAR y ejecute CLICONFG.EXE.

El protocolo de Canalizaciones con nombre será el primero en la lista. Desmótelo y promueva TCP / IP.

Probar la aplicación a fondo.

Espero esta ayuda

Ageu
fuente
Wow, qué joya ... gracias. Nunca supe que incluso existía.
Louis van Tonder
1
Esto configura al CLIENTE para usar TCP / IP, no el servidor.
mcr
Dios mío, ¡funciona! Acabo de iniciar sesión para votar por esta respuesta. gracias
Aki
15

También puedes configurar

Escucha todo a NO

en el diálogo del protocolo y luego en la dirección IP IP1 (por ejemplo)

conjunto habilitado en Sí,

definir su dirección IP,

establecer TCP Dynamic en blanco y

Puerto TCP a 1433 (o lo que sea)

johnroster
fuente
Hacer esto en Windows 8.1 con SQL 2012 Express SP1 instalado provocó que SQL se bloqueara durante el inicio :(
Zhaph - Ben Duguid
Configuré todas las entradas IP 1, 2, ..., en habilitado + activo, borrado dinámico, borrado puerto, y configuré el puerto IPAll en 1433, luego tuve que agregar reglas para abrir TCP 1433 y UPD 1434 en el firewall (1434 no se requiere si no se usa el nombre, sino solo el número de puerto).
Mordachai
11

Este artículo me ayudó ...

Cómo habilitar conexiones remotas en SQL Server

Todo en SQL Server estaba configurado, mi problema era que el firewall estaba bloqueando el puerto 1433

JGilmartin
fuente
Todo el mundo sabe, o se encuentra fácilmente con la configuración de puertos permitidos de Azure. No se me pasó por la cabeza que el firewall de VM WINDOWS puede bloquear el puerto. Gracias. + 1
2b77bee6-5445-4c77-b1eb-4df3e5
11

Tuve este problema recientemente. Agosto de 2015

Resuelto abriendo el Administrador de configuración de SQL Server

  • Configuración de red de SQL Server -> Protocolos para SQLEXPRESS
  • Propiedades en TCP / IP -> pestaña Direcciones IP
  • Todo permanece predeterminado, solo configure IPALL: Puerto TCP en 1433

Se puede conectar con el Administrador de SQL Server a la máquina: [hostaddress], 1433

Ejemplo:

ingrese la descripción de la imagen aquí

DDan
fuente
6

En mi instalación de SQL Server 2012 Developer Edition, instalada con la configuración predeterminada, solo tuve que cargar el Administrador de configuración de SQL Server -> Configuración de red de SQL Server -> Protocolos para MSSQLSERVER y cambiar TCP / IP de Deshabilitado a Habilitado.

Phil
fuente
1
Nota rápida: para mí, esto no funcionó. La IP incorrecta estaba allí por alguna razón. Sin embargo, los pasos de Kyralessa hicieron el truco ya que invocaron la actualización de la IP.
Brian MacKay
Esto funciona para uno de mi servidor, pero no para el otro.
cheny
5

Tuve que agregar una regla de puerto de entrada del cortafuegos para abrir el puerto UDP 1434. Este es el único que escucha el explorador del servidor SQL.

Tom Redfern
fuente
3

Prefiero la forma de "Rosdi Kasim", ya que no requiere una configuración detallada en la IP.

Definitivamente lo olvidaré nuevamente cuando intente subir de nuevo otro servidor.

Keep It Simple Stupid (KISS) simplemente habilite el servicio Sql Server Browser, luego agregue \ SQLEXPRESS detrás de la IP cuando conecte el servidor.

El uso directo de IP sin "\ SQLEXPRESS" fue mi punto de falla ya que no usa el puerto predeterminado.

Gracias.

Extraterrestre
fuente
3

Tuve el mismo problema con la instancia con nombre instalada localmente de SQL Server 2014. Conectar usando el FQDN\InstanceNamefallaría, mientras que conectando usando solo mi hostname\InstanceNametrabajo. Por ejemplo: conectarse usando mycomputername\sql2014trabajado, pero usandomycomputername.mydomain.org\sql2014 no. DNS se resolvió correctamente, TCP / IP se habilitó en el Administrador de configuración de SQL, se agregaron las reglas del Firewall de Windows (y luego se apagó el firewall para realizar pruebas para asegurarse de que no estaba bloqueando nada), pero ninguno solucionó el problema.

Finalmente, tuve que iniciar el servicio " Navegador de SQL Server " en SQL Server y eso solucionó el problema de conectividad.

Nunca me había dado cuenta de que el servicio del navegador SQL Server realmente ayudaba al servidor SQL a hacer conexiones; Tenía la impresión de que simplemente ayudó a llenar los menús desplegables cuando hizo clic en "buscar más" servidores para conectarse, pero en realidad ayuda a alinear las solicitudes de los clientes con el puerto correcto para usar, si el puerto no está asignado explícitamente (similar sobre cómo los enlaces a sitios web ayudan a aliviar el mismo problema en un servidor web IIS que aloja varios sitios web).

Este elemento de conexión es lo que me dio la pista sobre el servicio del navegador SQL Server: https://connect.microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using-fqdn-machine- nombre

  • cuando usa wstst05 \ sqlexpress como nombre del servidor, el código del cliente separa el nombre de la máquina del nombre de la instancia y wstst05 se compara con el nombre de netbios. No veo ningún problema para que coincidan y la conexión se considera local. A partir de ahí, recuperamos la información necesaria SIN contactar al Navegador SQL y nos conectamos a la instancia SQL a través de la Memoria Compartida sin ningún problema.
  • cuando usa wstst05.capatest.local \ sqlexpress, el código del cliente falla la comparación del nombre (wstst05.capatest.local) con el nombre de netbios (wstst05) y considera la conexión "remota". Esto es por diseño y definitivamente consideraremos mejorar esto en el futuro. De todos modos, debido a que considera la conexión remota y al hecho de que es una instancia con nombre, el cliente decide que necesita usar SQLBrowser para la resolución de nombres. Intenta ponerse en contacto con el navegador SQL en wstst05.capatest.local (puerto UDP 1434) y aparentemente esa parte falla. De ahí el error que obtienes.

La razón del servicio "Navegador SQL Server" de TechNet (énfasis agregado por mí): https://technet.microsoft.com/en-us/library/ms181087(v=sql.120).aspx

Desde la sección "Uso del navegador SQL Server":

Si el servicio del navegador SQL Server no se está ejecutando, aún puede conectarse a SQL Server si proporciona el número de puerto correcto o la canalización con nombre. Por ejemplo, puede conectarse a la instancia predeterminada de SQL Server con TCP / IP si se está ejecutando en el puerto 1433. Sin embargo, si el servicio del navegador SQL Server no se está ejecutando, las siguientes conexiones no funcionan :

  • Cualquier componente que intente conectarse a una instancia con nombre sin especificar completamente todos los parámetros (como el puerto TCP / IP o la tubería con nombre) .
  • Cualquier componente que genere o pase información de servidor \ instancia que luego otros componentes puedan usar para volver a conectarse.
  • Conectarse a una instancia con nombre sin proporcionar el número de puerto o tubería.
  • DAC a una instancia con nombre o la instancia predeterminada si no usa el puerto TCP / IP 1433.
  • El servicio de redireccionador OLAP.
  • Enumeración de servidores en SQL Server Management Studio, Enterprise Manager o Query Analyzer.

Si está utilizando SQL Server en un escenario cliente-servidor (por ejemplo, cuando su aplicación accede a SQL Server a través de una red), si detiene o deshabilita el servicio del navegador SQL Server, debe asignar un número de puerto específico a cada instancia y escriba su código de aplicación de cliente para usar siempre ese número de puerto. Este enfoque tiene los siguientes problemas :

  • Debe actualizar y mantener el código de la aplicación del cliente para asegurarse de que se está conectando al puerto adecuado.
  • El puerto que elija para cada instancia puede ser utilizado por otro servicio o aplicación en el servidor, lo que hace que la instancia de SQL Server no esté disponible.

Y más información del mismo artículo de la sección "Cómo funciona el navegador SQL Server":

Porque solo una instancia de SQL Server puede usar un puerto o tubería, se asignan diferentes números de puerto y nombres de canalización para instancias con nombre, incluido SQL Server Express. De manera predeterminada, cuando está habilitado, tanto las instancias con nombre como SQL Server Express están configuradas para usar puertos dinámicos, es decir, se asigna un puerto disponible cuando se inicia SQL Server. Si lo desea, se puede asignar un puerto específico a una instancia de SQL Server. Al conectarse, los clientes pueden especificar un puerto específico; pero si el puerto se asigna dinámicamente, el número de puerto puede cambiar cada vez que se reinicia SQL Server, por lo que el cliente desconoce el número de puerto correcto. ... Cuando los clientes de SQL Server solicitan recursos de SQL Server, la biblioteca de red del cliente envía un mensaje UDP al servidor utilizando el puerto 1434. El navegador SQL Server responde con el puerto TCP / IP o canalización con nombre de la instancia solicitada.

BateTech
fuente
2

Tuve que agregar el puerto a través de Configuration Manager y agregar el número de puerto en mi conexión sql [host] \ [nombre de instancia de db], 1433

Tenga en cuenta la, (coma) entre nombre de instancia y puerto

Dynamiclynk
fuente
1

¡Tenía un problema diferente de lo que todas las respuestas hasta ahora mencionaron!

Debería comenzar diciendo que lo tenía en Visual Studio, y no en SQL Server Express, pero la solución debería ser exactamente la misma.

Bueno, dios, en realidad es muy simple y quizás un poco tonto. Cuando intenté crear una base de datos y Visual Studio sugirió el nombre del Servidor SQL, me dio mi nombre de usuario de Windows y dado que en realidad es el nombre del servidor, lo elegí.

En realidad, en realidad era mi nombre de usuario de Windows + \SQLEXPRESS. Si no cambiaste ninguna configuración, probablemente esta también sea tuya. Si funciona, deja de leer; esta es mi respuesta. Si no funciona, tal vez el nombre sea diferente.

Si, como yo, solo tuvo este problema en Visual Studio para verificar cuál es el suyo, siga estos pasos:

  1. Abra el icono de SQL Server Management Studio .
  2. Si no ve su servidor (acoplado a la izquierda de manera predeterminada) presione F8o vaya a Ver -> Explorador de objetos .
  3. Haga clic derecho en el nombre del servidor y elija Propiedades (El último elemento)
  4. En la parte inferior izquierda, puede ver el nombre real de su servidor en " Servidor " (no en Conexión, sino arriba).

¡Este es el nombre del servidor y esto es a lo que debe intentar conectarse! ¡No es lo que sugiere Visual Studio!

MasterMastic
fuente
1

En mi caso, la base de datos se estaba ejecutando en un puerto no estándar. Compruebe que el puerto que está conectando es el mismo que el puerto en el que se ejecuta la base de datos. Si hay más instancias de SQL Server, verifique la correcta.

Tomás Kubes
fuente
0

Todo lo que necesita hacer es abrir el puerto correspondiente en el firewall del servidor.

usuario1968210
fuente
66
Desafortunadamente, eso no es "todo lo que necesita hacer". Hay muchos otros pasos que deben tomarse, como se describe en la respuesta aceptada anteriormente.
Salse
2
En realidad, en mi caso esto fue todo lo que necesitaba hacer, tan injustamente marcado y una entrada realmente útil.
MagicalArmchair
1
Agregar una regla para abrir el puerto 1433 fue lo que me arregló.
GiddyUpHorsey
Creo que es justo decir "muchas cosas tienen que estar alineadas, qué pasos adicionales son necesarios para que varíen"
Mordachai
Tuve que hacer todos los de Kyralessa y Pete y este también antes de poder obtener Windows 10 que sirve SQL.
alfadog67
0

¿Tiene problemas para conectarse a SQL Server?

Intenta desconectar el firewall.

Si puede conectarse con el cortafuegos desconectado, es posible que omita algunas reglas de entrada como "sql service broker", agregue estas reglas de entrada a su cortafuegos:

"CONEXIÓN DE ADMINISTRACIÓN SQL" PUERTO TCP 1434

"SQL ADMIN CONNECTION" UDP PUERTO 1434

"SERVICIO DE ANÁLISIS DE SQL" PUERTO TCP 2383

"SERVICIO DE ANÁLISIS DE EXPLORACIÓN DE SQL" PUERTO TCP 2382

PUERTO TCP "DEPURADOR SQL / RPC" 135

PUERTO TCP "SERVIDOR SQL" 1433 y otros si tiene puertos dinámicos

PUERTO TCP "SQL SERVICE BROKER" 4022

Pau Dominguez
fuente