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

0. 前置き

MS SQL Server は LXC で動作しません。(インストールできるけど動かない)
このためインストール先の Linux は実機、または KVM を用意する必要があります。

Linux 版 MS SQL Server (Express を含む) には以下の 2 種類があり、
systemd を偽装した実装は Docker 版だけであり、LXC はどちらにも当てはまらない。
(理由は他にもあるけど一番大きな問題がこれ。いきなりコケるからログも出ない)
RHEL10 に対応する MS SQL Server 2025Preview 版として 2025-11-18 から提供されています。
公式サポートの時期について ChatGPTGemini はともに 2026 年の夏頃という予測を出しました。

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


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

•インストーラをインストールする。
$ su
# curl -o /etc/yum.repos.d/mssql-server.repo https://packages.microsoft.com/config/rhel/10/mssql-server-preview.repo
# dnf install -y mssql-server-selinux
# dnf install -y mssql-server
混雑のせいか、ダウンロードに時間がかかる。(90 分間ぐらい)
 …省略…
+--------------------------------------------------------------+
'sudo /opt/mssql/bin/mssql-conf setup' を実行し、
Microsoft SQL Server のセットアップを完了してください
+--------------------------------------------------------------+
 …省略…
完了しました!
# ls -ogh /opt/mssql/lib/mssql-conf/mssql-conf.py
インストーラ本体。
-rwxrwxr-x. 1 26K 10月 25 08:43 /opt/mssql/lib/mssql-conf/mssql-conf.py
• MS SQL Server 本体をインストールする。
# /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 を起動しています。
•起動チェックをする。
# systemctl status mssql-server | grep Active:
active が表示されること。
  Active: active (running) since Wed 2025-12-10 17:39:41 JST; 3min 45s ago 
# exit
$


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

TDS はポート 1433 が標準。

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


Windows PC から接続してみる。
− □ × 
 >_ 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 -Q "SELECT @@VERSION"  
Microsoft SQL Server 2025 (RTM) - 17.0.1000.7 (X64)
        Oct 21 2025 12:05:57
        Copyright (C) 2025 Microsoft Corporation
        Express Edition (64-bit) on Linux (AlmaLinux 10.1 (Heliotrope Lion)) <X64>

(1 行処理されました)

PS C:\> exit 


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

•リポジトリを登録する。(公式: リポジトリは 9 のものを使用する)
Microsoft の案内だと sudo を使用しているが、パスワード入力のプロンプトが表示されなくなるので su してから実施する。
$ su
# curl https://packages.microsoft.com/config/rhel/9/prod.repo | sudo tee /etc/yum.repos.d/mssql-release.repo

•旧 mssql-tools を削除する。
# dnf remove mssql-tools unixODBC-utf16 unixODBC-utf16-devel
インストールされていないのでエラーが表示される。
引数に一致する結果がありません: mssql-tools
引数に一致する結果がありません: unixODBC-utf16
引数に一致する結果がありません: unixODBC-utf16-devel 
削除対象のパッケージはありません。
依存関係が解決しました。
行うべきことはありません。
完了しました!
• mssql-tools18 と ODBC 開発者パッケージをインストールする。
# 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.5.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.4.1.1-1.x86_64                        3/4
  …省略…

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


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

•実行パスを設定する。
$ echo 'export PATH="$PATH:/opt/mssql-tools18/bin"' >> ~/.bash_profile
$ source ~/.bash_profile

•接続を確認する。
 Microsoft の注意書き ( Note ) に従ってオプション -No を付加する。
$ sqlcmd -S localhost,1433 -U sa -P 'Password123' -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

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

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

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


おまけ (暗号化を確認する SQL)
$ 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 になる。


5. GUI から接続

DBeaver 25.3.0 と SSMS 22.1 で接続する。
このデータベース TestDB に SSMS 18.4 から接続すると、なぜかテーブルを閲覧するだけで SSMS が落ちる。

Windows 版 DBeaver 25.3.0 の画面


SSMS 22.1 の画面