none
Crear conexion VPN en SQL Server RRS feed

  • Pregunta

  • Buenas tardes,

    Me gustaria saber si es posible crear mediante SQl Server 2014, en un procedimiento una conexion VPN, abrirla y conectar a una instancia SQL a traves de la VPN, recoger unos datos y cerrar la conexion VPN, es decir un procedimiento que abra una conexion VPN a un SQL Server remoto a traves de esta y efectuar lecturas y cuando termine cerrar la conexion VPN.

    Muchas gracias de antemano.



    jueves, 14 de enero de 2016 8:29

Respuestas

Todas las respuestas

  • Hola,
    No hay una respuésta "fácil" a tu pregunta, y con fácil me refiero a darte un método ya hecho, ya que la parte principal es la creación/conexión VPN y esa parte es totalmente externa a SQL Server.

    Lo primero que necesitas es crear esa conexión, que puede ser a nivel de router, a nivel de software, con conexión manual, con conexión automática cuando hay tráfico hacia la red de destino, etc., es decir, hay tantas variables en función de tu infraestructura de red, hardware y software que sin conocerlo es dificil ayudarte. Para este punto lo mejor sería que preguntaras en los foros de red o de Windows Server.
    Una vez tengas la VPN creada, el siguiente paso será que decidas como vas a conectar y traer los datos de el SQL Server remoto (Linked Server, SSIS, Openquery, etc.). Para elegir el método también es importante la calidad de la conexión remota.

    Por ejemplo: vamos a suponer que tienes una VPN por software (mas que nada porque si la levanta tu router automáticamente a demanda entiendo que no estarías ni preguntando) que inicias con un comando/ejecutable.
        * Activas en SQL Server "local" xp_cmdshell (revisa las posibles implicaciones a nivel de seguridad).
        * Creas un PROC que con xp_cmdshell ejecute el comando de inicio de la VPN.
        * Desde ese mismo PROC lanzas la extracción de datos con el método que mas te guste.
        * El PROC ejecuta el comando de cierre de la VPN.
        
    Como te decía al principio, solo puedo darte ejemplos y supuestos, porque no conozco tu infraestructura.

    Espero que te sirva.
    Un saludo.
    Diego
    jueves, 14 de enero de 2016 8:51
  • Muchas gracias Diego por tu respuesta.

    Ahora bien, efectivamente como dices actualmente usamos un software de terceros donde especificamos la red vpn (mivpnexterna.es), el grupo (grupoSql) donde nos conectamos asi como el usuario y password. Como bien dices se puede implementar un comando por xp_cmdshell sabes algun ejemplo o api de ayuda con esta casuistica en concreto.

    Un Saludo.

    jueves, 14 de enero de 2016 9:36
  • Comprueba si la VPN sigue algún protocolo estándar, de forma que la puedas dejar configurada en el propio Windows en lugar de tener que pasar por la interfaz de un software de terceros (muchas veces los "terceros" te dan un software para facilitarte el uso de la VPN, pero realmente no es necesario usarlo porque sigue un estándar tal como PPTP o L2TP, y se puede configurar desde Windows si te molestas en hacerlo). Si es así, y la VPN la configuras en Windows con un nombre tal como "MiVpn", entonces desde el xp_cmdshell la puedes activar usando un comando como este:

    RASDIAL MiVpn

    y luego para desconectarla:

    RASDIAL MiVpn /DISCONNECT

    jueves, 14 de enero de 2016 10:10
  • Hola:

    Yo suelo hacer algo así para las ejecuciones con xp_cmdshell (solo lo utilizo si no tengo mas remedio), para controlar la salida del comando:

    DECLARE @ReturnCode INT

    IF object_id('tempdb..##Errores') IS NULL CREATE TABLE ##Errores ([Message] VARCHAR(2000)) ELSE TRUNCATE TABLE ##Errores INSERT INTO ##Errores

    --Realmente solo necesitarías: EXEC master.dbo.xp_cmdshell 'Comando' EXEC @ReturnCode = master.dbo.xp_cmdshell 'Comando a ejecutar' IF @ReturnCode <> 0 BEGIN SELECT [Message] FROM ##Errores WHERE [Message] IS NOT NULL RETURN @ReturnCode END

    De este modo, si la ejecución del comando de sistema a través de xp_cmdshell devuelve un error lo registro y muestro.

    Ahora te faltaría comprobar que tu ejecutable de VPN pueda ser lanzado con parámetros para conectar y desconectar sin que muestre ningún tipo de interfaz, para que pueda funcionar de forma desatendida.

    Una vez consigas que la VPN funcione te montas un Linked Server (o lo que prefieras) para llegar al SQL remoto y ya lo tendrías.

    Espero que te sirva.

    Un saludo.

    Diego


    jueves, 14 de enero de 2016 11:19
  • Adicionalmente a todo lo dicho, creo que lo que deberías hacer es orquestar todo el proceso fuera de SQL Server con PowerShell, realmente powershell está pensado para estos entornos híbridos en los que has de tener acceso a no se cuantos recursos externos.

    aquí tienes un link para administrar vpns con powershell https://technet.microsoft.com/en-us/library/jj613766.aspx,

    aquí una respuesta de como ejecutar comandos sql

    http://stackoverflow.com/questions/8423541/how-do-you-run-a-sql-server-query-from-powershell

    Powershell tiene control de erroes y me parece mucho mas robusto


    Comparte lo que sepas, aprende lo que no sepas (FGG)
    portalSQL
    El rincón del DBA

    jueves, 14 de enero de 2016 12:47
    Moderador
  • La Vpn por cuestión de seguridad, debe ir en la capa 2, es decir a nivel de router, el SQL ya está muy adentro, si tu router es medianamente avanzado tendrás opciones para crear Vpn (IPSec son las más seguras), dejar pasar el puerto del SQL, crear reglas en el firewall respecto a esto, etc.
    viernes, 15 de enero de 2016 20:50