AzureでSQLサーバにlinuxから接続する

最近Azureにはまっています。AzureはMSDNのサブスクリプションを持っていると無料で使える枠があるので非常に便利です。ちょっと試したいときとかサクッとサーバ作って試せますから。

Azureでは公式にはデータベースのサービスはSQLServerになっているようです。MySQL等もサードパーティのサービスで使えるみたいですが、やはりAzureをせっかく使うのならばSQLServerを使ってみることにします。

SQLサーバには特に不満はないのですが、Linuxからの使い勝手が悪かったりします。今回はunixodbcとfreetdsを使ってコマンドラインから接続を試みます

環境
  • OS:Ubuntu14.4
手順

unixodbc,freetds,tdsodbcのインストール

sudo apt-get install freetds-common
sudo apt-get install freetds-bin
sudo apt-get install unixodbc
sudo apt-get install tdsodbc
/etc/odbcinst.ini
[SQLServer]
	Servername = SqlServer
	Driver = FreeTDS
	database = master
/etc/odbc.ini

odbcinst.iniのDriverとodbc.iniの[FreeTDS]の部分は名前を合わせます

[FreeTDS]
Description	= TDS driver (Sybase/MS SQL)
Driver		= /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup		= /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
FileUsage = 1
CPTimeout = 5
CPReuse = 5
/etc/freetds/freetds.conf

odbcinst.iniのServernameと[SqlServer]の部分の名前を合わせます

hostにはazureのSQLサーバの接続先ホスト名を記入します

[SqlServer]
	host = xxxxxxxxx.database.windows.net
	port = 1433
	tds version = 8.0
環境変数
$ cat .bash_profile 
export ODBCINI=/etc/odbc.ini
export ODBCSYSINI=/etc
export FREETDSCONF=/etc/freetds/freetds.conf
接続

sqlserverusernameとsqlserverpasswordはSQLサーバのユーザ名とパスワードをいれます

ここがポイントなのですが -U の後のユーザ名に@xxxxxxxxxとSQLサーバの接続先ホストのホスト名を入れてやる必要があります

$ tsql -S SqlServer -U sqlserverusername@xxxxxxxxx -P sqlserverpassword -D master

以下のサイトを参考にしました

http://jyukutyo.hatenablog.com/entry/20111024/1319473427

http://makeitsmartjp.com/2013/02/centos-sqlserver.html