MS SQL Server Express を Linux にインストール
〜 小規模の T-SQL 〜
2025-12-12 作成 福島
2025-12-22 更新 福島
TOP > tips > mssqlexp-linux
[ TIPS | TOYS | OTAKU | LINK | MOVIE | CGI | AvTitle | ConfuTerm | HIST | AnSt | Asob | Shell ]

0. 前置き

AlmaLinux 10 と LXC で Microsoft SQL Server 2025 Express を動作させます。

最初は RHEL 10 用のリポジトリを使用したインストールを記述しましたが、直近 2 週間の間に Microsoft がリポジトリを変更したらしく、
RHEL 10 用のリポジトリで 2025 Express を選択できなくなってしまいました。
なので RHEL 9 用のリポジトリで 2025 Express をインストールします。(Preview/Evaluation 版にある 180 日間の制限はありません)

本稿は、以下のドキュメントに沿っています。
動作環境: マイクロソフトのシステム要件はここ
項目内容備考
コンテナOS (LXC)AlmaLinux release 10.1 (Heliotrope Lion)本稿記述時の最新版
ホスト名express-
IP アドレス10.0.3.11-
管理者パスワードPassword123管理者 sa 用のパスワード
この文字列をこのまま使わないように
パスワードのルールを参照すること
ホストOSAlmaLinux release 10.1 (Heliotrope Lion)本稿記述時の最新版
vCPU4-
RAM4GBMS SQL Server だけなら 2GB
Linux が動作するために 0.5GB 程度必要
ストレージ20GBOS + MS SQL Server Express なら 6.5GB
データベース等の作業領域として余裕を持たせた
IP アドレス192.168.11.111-


1. コンテナを作成する。

ここを参考に以下の条件でコンテナを作成する。

OSAlmaLinux --release 10 --arch amd64
ホスト名express
IP アドレス10.0.3.11


2. MS SQL Server 2025 Express のインストール

2-1. 日本語環境を整える。(これをしないと setup で日本語が表示されない)
$ ssh admin@10.0.3.11
express$ su
express# dnf install -y glibc-langpack-ja
express# localectl list-locales | grep ja
ja_JP.UTF-8
express# export LANG=ja_JP.UTF-8 ; export LC_ALL=ja_JP.UTF-8
2-2. MS SQL Server 本体をインストールする。(10 だけど RHEL9 のリポジトリ)
express# curl -o /etc/yum.repos.d/mssql-server.repo \
https://packages.microsoft.com/config/rhel/9/mssql-server-preview.repo

express# dnf install -y mssql-server
混雑のせいか、ダウンロードに時間がかかる。(90 分間ぐらい)
 …省略…
+--------------------------------------------------------------+
'sudo /opt/mssql/bin/mssql-conf setup' を実行し、
Microsoft SQL Server のセットアップを完了してください
+--------------------------------------------------------------+
 …省略…
完了しました!
express# systemctl status mssql-server | grep Active:
この時点でサービス登録までされている。(setup 前なので inactive)
  Active: inactive (dead) 
express# ls -ogh /opt/mssql/lib/mssql-conf/mssql-conf.py
設定ソフト。
-rwxrwxr-x. 1 26K 9月 10 14:33 /opt/mssql/lib/mssql-conf/mssql-conf.py
2-3. MS SQL Server 本体を有効にする。(Express を選択する)
express# /opt/mssql/bin/mssql-conf setup
SQL Server のエディションを選択します:
  1) Evaluation (無料、製品使用権なし、期限 180 日間)
  2) Enterprise Developer (無料、製品使用権なし)
  3) Standard Developer (無料、製品使用権なし)
  4) Express (無料)         ← これを選択する
  5) Web (有料)
  6) Standard (有料)
  7) Enterprise (有料) - CPU core utilization restricted to 20 physical/40 hyperthreaded
  8) Enterprise Core (有料) - CPU core utilization up to Operating System Maximum
  9) 小売販売チャネルを介してライセンスを購入し、入力するプロダクト キーを持っています。
 10) Standard (Billed through Azure) - Use pay-as-you-go billing through Azure.
 11) Enterprise Core (Billed through Azure) - Use pay-as-you-go billing through Azure.

エディションの詳細については、以下を参照してください
https://go.microsoft.com/fwlink/?LinkId=2109348&clcid=0x411

このソフトウェアの有料エディションを使用するには、個別のライセンスを以下から取得する必要があります
Microsoft ボリューム ライセンス プログラム。
有料エディションを選択することは、
このソフトウェアをインストールおよび実行するための適切な数のライセンスがあることを確認していることになります。
By choosing an edition billed Pay-As-You-Go through Azure, you are verifying
that the server and SQL Server will be connected to Azure by installing the
management agent and Azure extension for SQL Server.

エディションを入力してください(1-10): 4 
この製品のライセンス条項は
/usr/share/doc/mssql-server or downloaded from: https://aka.ms/useterms

プライバシーに関する声明は、次の場所で確認できます:
https://go.microsoft.com/fwlink/?LinkId=853010&clcid=0x411

ライセンス条項に同意しますか? [Yes/No]:y 

SQL Server の言語の選択:
(1) English
(2) Deutsch
(3) Español
(4) Français
(5) Italiano
(6) 日本語
(7) 한국어
(8) Português
(9) Руѝѝкий
(10) 中文 – 简体
(11) 中文 (繝体)
オプション 1-11 を入力: 6 
SQL Server システム管理者パスワードを入力してください: Password123   ← 実際は表示されない
SQL Server システム管理者パスワードを確認入力してください: Password123 
SQL Server を構成しています...

ライセンス PID は正常に処理されました。新しいエディションは [Express Edition] です。
  …省略…
セットアップは正常に完了しました。SQL Server を起動しています。
2-4. 起動チェックをする。
express# systemctl status mssql-server | grep Active:
active が表示されること。
  Active: active (running) since Wed 2025-12-10 17:39:41 JST; 3min 45s ago 
express# exit
express$ exit
$


3. ファイアウォールの調整

TDS はポート 1433 が標準。

$ ssh admin@10.0.3.11
express$ su
express# firewall-cmd --zone=public --add-port=1433/tcp --permanent
express# firewall-cmd --reload
express# firewall-cmd --list-ports
 1433/tcp 
ポート 1433 が許可された。
express# exit
express$ exit
$ exit


4. コマンドラインツールのインストール

4-1. リポジトリを登録する。(公式: リポジトリは 9 のものを使用する)
Microsoft の案内に従うとパスワード入力のプロンプトが表示されず、先に進めなくなる。
これを回避するため sudo ではなく su してから実施する。

$ ssh admin@10.0.3.11
express$ su
express# export LANG=ja_JP.UTF-8 ; export LC_ALL=ja_JP.UTF-8
express# curl https://packages.microsoft.com/config/rhel/9/prod.repo \
| sudo tee /etc/yum.repos.d/mssql-release.repo
4-2. 旧 mssql-tools を削除する。
express# dnf remove mssql-tools unixODBC-utf16 unixODBC-utf16-devel
インストールされていないのでエラーが表示される。
引数に一致する結果がありません: mssql-tools
引数に一致する結果がありません: unixODBC-utf16
引数に一致する結果がありません: unixODBC-utf16-devel 
削除対象のパッケージはありません。
依存関係が解決しました。
行うべきことはありません。
完了しました!
4-3. mssql-tools18 と ODBC 開発者パッケージをインストールする。
express# dnf install -y mssql-tools18 unixODBC-devel
  …省略…
The license terms for this product can be downloaded from
https://aka.ms/odbc18eula and found in
/usr/share/doc/msodbcsql18/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.

Do you accept the license terms? (Enter YES or NO)
yes       ←「y」は不可

  インストール中   : msodbcsql18-18.6.1.1-1.x86_64                          2/4 
  …省略…
The license terms for this product can be downloaded from
http://go.microsoft.com/fwlink/?LinkId=746949 and found in
/usr/share/doc/mssql-tools18/LICENSE.txt . By entering 'YES',
you indicate that you accept the license terms.

Do you accept the license terms? (Enter YES or NO)
yes       ←「y」は不可

  インストール中   : mssql-tools18-18.6.1.1-1.x86_64                        3/4
  …省略…

完了しました!
4-4. アップデートをチェックする。
express# dnf check-update
express# dnf update mssql-tools18
express# exit
express$ exit
$


5. コマンドラインツールの使用準備と確認

5-1. 実行パスを設定する。
$ ssh admin@10.0.3.11
express$ echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
express$ source ~/.bash_profile
5-2. 接続を確認する。
express$ sqlcmd -S localhost,1433 -U sa -P 'Password123' -No
(Microsoft の注意書き  Note  に従ってオプション -No を付加している)
CREATE DATABASE TestDB;

SELECT Name FROM sys.databases;
GO
USE TestDB;
CREATE TABLE dbo.Inventory ( id INT, name NVARCHAR (50), quantity INT, PRIMARY KEY (id) );
INSERT INTO dbo.Inventory VALUES (1, 'banana', 150); INSERT INTO dbo.Inventory VALUES (2, 'orange', 154);
GO
SELECT * FROM dbo.Inventory WHERE quantity > 152;
GO
QUIT
ヒアドキュメントで書きたいけど「クイック スタート: データの作成とクエリ」に倣うとこうなる。
express$ exit
$

接続の暗号化オプションについて:
 Note sqlcmd の新しいバージョンは、既定でセキュリティで保護されています。 
 重要 これは、SQL Server 2022 (16.x) 以前のバージョンからの破壊的変更です。 

sqlcmd v18.4 は標準で TLS 暗号化と証明書の検証を行う。(v17 から)
証明書が意味を持たない localhost や LAN 接続ではこれらが邪魔になるため、以下いずれかのオプションが必要になる。
オプションTLS 暗号化証明書の検証
-Noなししない
-Nmあり発行元が不要
-Nsあり発行元が必要
-Cありしない

環境変数では指定できない。Alias を定義しておくと吉。
express$ echo "alias sqlcmd='sqlcmd -No -C'" >> ~/.bash_profile
express$ source ~/.bash_profile


おまけ (暗号化を確認する SQL)
express$ sqlcmd -S localhost,1433 -U sa -P 'Password123' -Nm -C << EOF
SET NOCOUNT ON;
SELECT s.session_id, c.encrypt_option
FROM sys.dm_exec_sessions AS s
  INNER JOIN sys.dm_exec_connections AS c ON s.session_id = c.session_id
WHERE s.session_id = @@SPID;
EOF
session_id encrypt_option
---------- ------------------------------
        67 TRUE
オプション -Nm -C を指定しているので暗号化は TRUE になる。


6. ポート転送の設定

親 OS から LXC へポート転送する。(親:1433 → LXC:1433)
$ su
# firewall-cmd --permanent --add-forward-port=port=1433:proto=tcp:toport=1433:toaddr=10.0.3.11
# firewall-cmd --reload
# firewall-cmd --list-forward-ports
port=1433:proto=tcp:toport=1433:toaddr=10.0.3.11
# exit
$


7. Windows PC から接続

7-1. ターミナルから接続する。
− □ × 
 >_ Windows PowerShell ×   + |
 
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新機能と改善のために最新の PowerShell をインストールしてください!https://aka.ms/PSWindows  

PS C:\> sqlcmd -S 192.168.11.111,1433 -U sa -P "Password123" -h -1 -No -Q "SELECT @@VERSION" 
Microsoft SQL Server 2025 (RC1) - 17.0.925.4 (X64)
        Sep  9 2025 17:31:28
        Copyright (C) 2025 Microsoft Corporation
        Express Edition (64-bit) on Linux (AlmaLinux 10.1 (Heliotrope Lion)) <X64>

(1 行処理されました)

PS C:\> sqlcmd -S 192.168.11.111,1433 -U sa -P "Password123" -d TestDB -No -Q "SELECT * FROM dbo.Inventory"  
id          name                                               quantity
----------- -------------------------------------------------- -----------
          1 banana                                                     150
          2 orange                                                     154

(2 行処理されました)

PS C:\> exit 

新しいバージョンの sqlcmd はオプション -No または -C が必要。
7-2. DBeaver 25.3.0 と SSMS 22.1 で接続する。
Windows 版 DBeaver 25.3.0 の画面


SSMS 22.1 の画面
上記 5-2 で作成したデータベース TestDB に SSMS 18.12.1 から接続すると、なぜかテーブルの値を取得できない。