How do I connect to SQL Azure from NodeJS/Tedious?

Problem

I have a SQL Azure database that I'm trying to connect to from a NodeJS application running in an Azure Linux VM. Everything works fine when I'm on a local SQL Database/and local machine for NodeJS. However, when I run from my vm, I get the following output (My trace output plus the Tedious debug event):

connected to XXXXXXX.database.windows.net:1433
State change: Connecting -> SentPrelogin
State change: SentPrelogin -> SentLogin7WithStandardLogin
connection to XXXXXXX.database.windows.net:1433 closed
State change: SentLogin7WithStandardLogin -> Final
Writing CSV files....
connection to XXXXXXX.database.windows.net:1433 closed
State change: Final -> Final
All Done!

The problem is that no error is ever raised, but the connection seems to be automatically closed.

Any thoughts on what might be happening here or how I can get to an actual error?

Problem courtesy of: Howard Dierking

Solution

Ok - solved it thanks to this thread

There were 2 issues:

  1. SQL Azure requires encrypted connections, so you need encrypt:true in the connection options
  2. the userName configuration option requires the database-qualified name (e.g. user@XXXXXX.database.windows.net)

Just in case anyone else runs into this :)

Solution courtesy of: Howard Dierking

Discussion

I encountered a 3rd issue that I thought was worth sharing. Due to some firewall/isp/port/etc issues, I had to set up a local SQL instance to debug with.

The local instance of SQL Server 2014 worked when I used a 'database' parameter under the main tree. However, the Azure instance would only take the 'database' parameter if it is under 'options'.

"sqlserverConfig": {
    "userName": "SomeUser@someazureserver.database.windows.net",
    "password": "SomePW",
    "server": "someazureserver.database.windows.net",
    "options": {
        "encrypt": true,
        "database": "SomeDatabase"
    }
  }

For me, the symptom that I observed was that I was connecting to the master db by default - So my stored procedures weren't found, etc. Very frustrating. Hope this helps someone.

Discussion courtesy of: edhubbell

This recipe can be found in it's original form on Stack Over Flow.