Ubuntu上にSQL Serverをインストールして、C#から接続することができるようなので試してみました。
環境構築にはVPSのWebARENA (Indigo)を利用しました。1時間単位の課金で非常に安価なためお勧めです
【検証環境】Ubuntu20.04 / .NET Core3.1
UbuntuにSQL Serverをインストール
https://learn.microsoft.com/ja-jp/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-ver16
1.パブリック リポジトリの GPG キーをインポート
wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
2.SQL Server Ubuntu リポジトリを登録
sudo add-apt-repository "$(wget -qO- https://packages.microsoft.com/config/ubuntu/20.04/mssql-server-preview.list)"
3.SQL Server をインストール
sudo apt-get update
sudo apt-get install -y mssql-server
4.SQL Serverをセットアップ
sudo /opt/mssql/bin/mssql-conf setup
SQL Serverのエディション、Administratorのパスワードを設定します
5.リモート接続する場合は、ポート1433を開放
VPSであればコントロールパネルなどから、AWSなどであればセキュリティグループからインバウンドルールにカスタムTCPで1433を許可します。
ただし、今回の検証ではVPSを利用していますが、Ubuntu Server 標準ファイアウォール ufwを使って設定します。https://server-network-note.net/2021/08/ubuntu-server-20-04-lts-firewall-ufw/
sudo ufw enable
sudo ufw allow 1433
# sshも
sudo ufw allow 22
Ubuntu上でローカル接続
コマンドラインツールのインストール
Ubuntu上からローカルで接続するには、SQL Serverコマンドラインツールをインストールします
1.curlのインストール
sudo apt-get update
sudo apt install curl
2.パブリック リポジトリの GPG キーをインポート
curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
3.Ubuntu リポジトリを登録
curl https://packages.microsoft.com/config/ubuntu/20.04/prod.list | sudo tee /etc/apt/sources.list.d/msprod.list
4.ソース一覧を更新し、unixODBC
開発者パッケージを使用してインストール コマンドを実行
sudo apt-get update
sudo apt-get install mssql-tools unixodbc-dev
5.最新バージョンのmssql-toolsに更新
sudo apt-get update
sudo apt-get install mssql-tools
6.環境変数の設定
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
ローカル接続
下記コマンドでログインします
sqlcmd -S localhost -U sa -P '<YourPassword>'
SQLの実行
データベースの作成なら下記コマンドを打ちます
CREATE DATABASE TestDB;
この状態では実行されず、GOを打つことで実行されます(末尾セミコロン不要)
GO
また、複数行入力してからGOを打つことも可能です
ターミナルからだとSQLの入力が煩わしい場合は、後述するSSMSでの入力のほうが楽かもしれません
SSMSからリモート接続
ポート開放を行っていれば、WindowsからSSMSで接続することができます
サーバ名にIPアドレスを指定して、接続します(ポートの指定は不要)
あとはWindowsで普段使っている通りに使えます
※Linux版のためか、テーブルデザインのGUIは使えないため、SQL文の作成が必要になります
C#から接続
基本的に普段使っている通りに使うことができるのでコードは省きます
変わるところとしては接続文字列ですが、以下の点にハマりました
- リモート接続の場合、IPにポートは不要(むしろ付けたらエラーになった)
- ローカル接続の場合、サーバ名は「localhost」にする(Windowsのように「localhostSQLEXPRESS」だとエラーになった)