DockerでSQL Serverを起動したら接続できなかった件

はじめに

Dockerを使用してSQL Serverを実行するためにMicrosftの公式ページの手順に従って構築しましたが、DB接続で問題が発生しました。

DockerによるSQL Server Linuxコンテナの構築

Microsoftの公式ページを参考に構築しました。

Docker:SQL Server on Linux 用のコンテナーのインストール - SQL Server
このクイック スタートでは、Docker を使用して SQL Server Linux コンテナー イメージを実行する方法を示します。 データベースに接続して、クエリを実行します。

DB接続の問題が発生

SQL Server への接続するためにsqlcmdを使って下記コマンドを実行した際にエラーとなりました。

docker exec -it sql1 /opt/mssql-tools/bin/sqlcmd ^
   -S localhost -U SA -P "<YourStrong@Passw0rd>" ^
   -Q "ALTER LOGIN SA WITH PASSWORD='<YourNewStrong@Passw0rd>'"

ログインできませんね・・・

Sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed for user 'SA'..

原因の特定

原因は、照合順序でした。(ちょっと訳があって変更してました。。。)

サーバーで大文字と小文字を区別する照合順序を使用する場合は、大文字と小文字の区別に注意してください。

https://learn.microsoft.com/ja-jp/sql/relational-databases/errors-events/mssqlserver-18456-database-engine-error?view=sql-server-ver16

公式ページをもとに以下のように照合順序を「Japanese_BIN2」に変更し、コンテナイメージを作成していました。SQL Serverの照合順序のデフォルトは「Japanese_CI_AS」となるため、大文字と小文字は区別しません。

docker run ^
   -e "ACCEPT_EULA=Y" ^
   -e "MSSQL_SA_PASSWORD=<YourStrong@Passw0rd>" ^
   -e "MSSQL_COLLATION=Japanese_BIN2" ^
   -p 1433:1433 --name sql1 --hostname sql1 ^
   -d ^
   mcr.microsoft.com/mssql/server:2019-latest

照合順序については以下のページを参考にしてください。

照合順序と Unicode のサポート - SQL Server
SQL Server での照合順序と Unicode のサポートについて学習します。

コメント