SQL Server
SQL Server
SSH Tunnel for Database Connection (such as ADO, ODBC, JDBC, etc.)
See more SSH Tunnel Examples
Demonstrates how to create an SSH tunneling client in a background thread of your application. This makes it possible to SSH tunnel database connections without the need for separate software (such as PuTTY) to be running.Chilkat SQL Server Downloads
-- Important: See this note about string length limitations for strings returned by sp_OAMethod calls.
--
CREATE PROCEDURE ChilkatSample
AS
BEGIN
DECLARE @hr int
-- Important: Do not use nvarchar(max). See the warning about using nvarchar(max).
DECLARE @sTmp0 nvarchar(4000)
DECLARE @success int
SELECT @success = 0
-- This example assumes the Chilkat API to have been previously unlocked.
-- See Global Unlock Sample for sample code.
SELECT @success = 0
DECLARE @tunnel int
EXEC @hr = sp_OACreate 'Chilkat.SshTunnel', @tunnel OUT
IF @hr <> 0
BEGIN
PRINT 'Failed to create ActiveX component'
RETURN
END
DECLARE @sshHostname nvarchar(4000)
SELECT @sshHostname = 'sftp.example.com'
DECLARE @sshPort int
SELECT @sshPort = 22
-- Connect to an SSH server and establish the SSH tunnel:
EXEC sp_OAMethod @tunnel, 'Connect', @success OUT, @sshHostname, @sshPort
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
-- Authenticate with the SSH server via a login/password
-- or with a public key.
-- This example demonstrates SSH password authentication.
EXEC sp_OAMethod @tunnel, 'AuthenticatePw', @success OUT, 'mySshLogin', 'mySshPassword'
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
-- The destination host/port is the database server.
-- The DestHostname may be the domain name or
-- IP address (in dotted decimal notation) of the database
-- server.
EXEC sp_OASetProperty @tunnel, 'DestPort', 1433
EXEC sp_OASetProperty @tunnel, 'DestHostname', 'myDbServer.com'
-- Start accepting connections in a background thread.
-- The SSH tunnels are autonomously run in a background
-- thread. There is one background thread for accepting
-- connections, and another for managing the tunnel pool.
DECLARE @listenPort int
SELECT @listenPort = 3316
EXEC sp_OAMethod @tunnel, 'BeginAccepting', @success OUT, @listenPort
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
-- At this point the app may connect to the database server through
-- the SSH tunnel. The database connection string would
-- use "localhost" for the hostname and 3316 for the port.
-- We're not going to show the database coding here,
-- because it can vary depending on the API you're using
-- (ADO, ODBC, OLE DB, etc. )
-- This is where the application's database code would go...
-- Stop the background listen/accept thread:
DECLARE @waitForThreadExit int
SELECT @waitForThreadExit = 1
EXEC sp_OAMethod @tunnel, 'StopAccepting', @success OUT, @waitForThreadExit
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
-- Close the SSH tunnel (would also kick any remaining connected clients).
EXEC sp_OAMethod @tunnel, 'CloseTunnel', @success OUT, @waitForThreadExit
IF @success <> 1
BEGIN
EXEC sp_OAGetProperty @tunnel, 'LastErrorText', @sTmp0 OUT
PRINT @sTmp0
EXEC @hr = sp_OADestroy @tunnel
RETURN
END
EXEC @hr = sp_OADestroy @tunnel
END
GO