martes, 24 de enero de 2017

Resolver problemas de conexión en Red con SQL Server

Introducción:

Después de migrar una base de datos SQL Compact a SQL Server 2008 R2 Express para permitir múltiples conexiones de mi aplicación de usuario desarrollada en visual basic 2010 desde distintos PC's de una red Local (Home), con equipos con Windows 7. El gran problema llega cuando al hacer la instalación el equipo que tiene instalado el servidor SQL Server Express funciona correctamente, pero los demás equipos de la red no pueden conectar con el servidor.

Este problema puede producirse cuando SQL Server  no está configurado para aceptar conexiones remotas. De forma predeterminada, SQL Server 2008 Express Edition y SQL Server 2008 Developer Edition no permite conexiones remotas.

Para configurar SQL Server 2005 para permitir conexiones remotas, debe completar estos pasos:
  • Habilitar conexiones remotas en la instancia de SQL Server que desea conectarse desde un equipo remoto.
  • Activar el servicio Explorador de SQL Server.
  • Configurar el firewall para permitir el tráfico de red que está relacionada con SQL Server y el servicio Explorador de SQL Server.
Lo primero es intentar configurar SQL Server para que acepte conexiones en Red, usando diversas guías del propio Microsoft, cambiamos la configuración conforme a lo establecido.
Ver enlace https://msdn.microsoft.com/es-es/library/ms345343.aspx
O este otro: http://www.3engine.net/wp/2009/02/sql-server-2008-como-configurarlo-para-conexiones-remotas/
O este último: https://blogs.msdn.microsoft.com/bethmassi/2008/09/17/enabling-remote-sql-express-2008-network-connections-on-vista/


El problema:

El caso es que a pesar de seguir los pasos y documentarme en todo lo posible, cada vez que intentaba conectar desde un equipo de la red local al equipo donde estaba el servidor de base de datos no lo lograba, siempre obtenía un error de conexión en red a SQL Server y un mensaje de alerta acerca de revisar el protocolo TCP.

Error: Microsoft SQL Native Client: error al establecer una conexión con el servidor. Al conectarse a SQL Server 2005, este error puede deberse a que el hecho de que en la configuración predeterminada de SQL Server no permite conexiones remotas.

Me volví loco intentando todo:

  1. Abrir el firewall creando reglas
  2. Asignar a SQL Server Express un puerto fijo (1343) en lugar de puertos dinámicos
  3. Asignar una IP fija a los equipos de la red en lugar de DHCP
  4. Mapear los puertos en el router de telefónica
Con nada de esto conseguí solucionar mis problemas de conexión.


La solución:

Estaba muy perdido, pero al final probé una cosa que me dio la información que necesitaba para saber donde estaba el problema. Me fui al firewall de Windows 7 en el servidor de SQL Server Express y lo deshabilité. También desactivé el antivirus (por si las moscas).
Intenté entonces la conexión desde el cliente y .....   ¡Tachan!  Conexión establecida.

¡El problema estaba en el Firewall de Windows!

¿Por qué no estaban funcionando las excepciones que creé en el firewall tanto para el puerto como para la aplicación SQL server?  Pues porque no estaban bien creadas.


Crear excepciones de Firewall de Windows

Si está ejecutando un firewall en el equipo que está ejecutando SQL Server 2008, las conexiones externas a SQL Server 2008 se bloquean a menos que SQL Server 2008 y el servicio Explorador de SQL Server pueden comunicarse a través del firewall. Debe crear una excepción para cada instancia de SQL Server 2008 que desee que acepte las conexiones remotas y una excepción para el servicio Explorador de SQL Server.

SQL Server 2008 utiliza un identificador de instancia como parte de la ruta de acceso al instalar sus archivos de programa. Para crear una excepción para cada instancia de SQL Server, tiene que identificar el identificador de instancia correcto. Para obtener un identificador de instancia, siga estos pasos:
  1. Haga clic en Inicio, seleccione programas, Microsoft SQL Server 2005, Herramientas de configuracióny, a continuación, haga clic en Administrador de configuración de SQL Server.

2. En el Administrador de configuración de SQL Server, haga clic en el servicio Explorador de SQL Server en el panel derecho, haga clic en el nombre de instancia en la ventana principal y, a continuación, haga clic en Propiedades.

3. En la página de Propiedades de explorador de SQL Server , haga clic en la ficha Opciones avanzadas , busque el identificador de instancia en la lista de propiedades y, a continuación, haga clic en Aceptar.

Para abrir Firewall de Windows, haga clic en Inicio, haga clic en Ejecutar, escriba firewall.cply, a continuación, haga clic en Aceptar.

Cree una excepción para SQL Server 2005 en Firewall de Windows

Para crear una excepción para SQL Server 2005 en Firewall de Windows, siga estos pasos:
  1. En Firewall de Windows, haga clic en la ficha excepciones y, a continuación, haga clic en Agregar programa.
  2. En la ventana Agregar un programa, haga clic en Examinar.
  3. Haga clic en C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn

    Nota: La ruta podría ser diferente, dependiendo de dónde está instalado SQL Server 2005. MSSQL10.SQLEXPRESS es un marcador de posición para el identificador de instancia que obtuvo en el paso 3 del procedimiento anterior.
  4. Repita los pasos 1 a 3 para cada instancia de SQL Server 2008 que necesita una excepción.

Cree una excepción para el servicio Explorador de SQL Server en Firewall de Windows

Para crear una excepción para el servicio Explorador de SQL Server en Firewall de Windows, siga estos pasos:
  1. En Firewall de Windows, haga clic en la ficha excepciones y, a continuación, haga clic en Agregar programa.
  2. En la ventana Agregar un programa, haga clic en Examinar.
  3. Haga clic en el programa ejecutable C:\Program Files\Microsoft SQL Server\90\Shared\sqlbrowser.exe, haga clic en Abrir y, a continuación, haga clic en Aceptar.

    Nota: La ruta podría ser diferente, dependiendo de dónde está instalado SQL Server 2008.