お疲れ様です。堺です。
ASP.NET Core MVCアプリ開発時のデバッグのため、DockerからローカルPCのSQL Server ExpressにODBC接続したかったのですが、ドキュメントの少なさもあり、かなり苦労させられました。
すったもんだの末に接続には成功したので、結論を共有しておこうと思います。
◇目次
結論:これらの設定が必要
個別の設定は、詳しいページがありますので適宜引用します。
手順1:SQL Serverへのリモートアクセスを許可する
こちらに詳しい手順が掲載されています:SQL Serverへリモート接続するために必要な設定(外部リンク)
要約すると、次の3点です。
- SSMS(Sql Server Management studio)->インスタンス右クリック->プロパティ->接続->「このサーバーへのリモート接続を許可する」のチェックをONに。
- SQL Server構成マネージャー->SQL Serverネットワークの構成->TCP/IPを有効化。
- サービス->「SQL Server Browser」のサービスを起動。
尚、1点目はデフォルトでONになっていますが、2,3点目は手動で設定が必要です。
SQL Server構成マネージャーはスタートメニューの「Microsoft SQL Server 20XX」の中にありますが、見つからない場合は、C:\Windows\System32フォルダーで「SQLServerManager*.msc」と検索をかければ見つかると思います。
尚、この操作の後、SQL Serverのサービスを再起動するのを忘れないようにしましょう。
手順2:SQL Serverのサーバー認証モードでSQL Server認証を許可
SSMS->インスタンス右クリック->プロパティ->セキュリティ->サーバー認証、でラジオボタンを「SQL Server認証モードとWindows認証モード」に切り替え
手順3:SQL Server認証のアカウントを作成し有効化する
こちらに詳しい手順が掲載されています:SQL Server 新規にログインアカウントを作成する(外部リンク)
手順4:接続文字列をローカルIPアドレスで指定する
最終的にたどり着いた接続文字列が↓です。
IPアドレスは、ローカルネットワーク内での接続先PCのものです。不明な方は、接続先PCでコマンドプロンプトを立ち上げ(Windows+Rキー->「cmd」と入力して起動)、ipconfigというコマンドを入力することで確認することができます。通常の環境ならば、192.168.~から始まるIPv4アドレスが見つかると思います。
ちなみに開発期間中はローカルIPアドレスを固定しておいた方がいいでしょう。
詳しい設定方法はこちらの記事で詳しく紹介されています。パソコンのIPアドレスを固定したい(外部リンク Windows Vistaでの設定方法紹介ですが、Win10など新しいOSでも同じ画面です。)
頻出エラーメッセージ集
→Windows認証で接続しようとすると、このメッセージではねられることがあります。SQL Server認証のアカウントを作り、接続文字列もSQL認証のものに変更してみましょう。
→接続文字列でローカルIPアドレスではなく名前付きインスタンス名(パソコン名が入っている名前など)を使用するとこれが出ます。
SQL Server Browserは名前付きインスタンスに接続するために使用されていますが、IPアドレスで接続先を直接指定すれば不要になります。
接続要求がサーバーに到達していないか、権限によるエラーです。
特に手順1あたりを特によく確認してみましょう。また、再起動を必要とする設定変更も多分に含んでいるため、設定を変更したら面倒でも都度WindowsやSQL Serverインスタンスを再起動してリトライしてみましょう。
→同じくネットワークエラー。接続失敗する理由は様々ですが、接続文字列かログイン情報を見直すしかないと思います。尚、理屈的にはWindows側のファイヤウォールの受信設定も必要だと思われますので注意してください。(私の環境では変更なしでOKでした。)
SQL Server Express LocalDBのインスタンスを使用するとこのエラーが出ます。LocalDBはLinuxは未対応のようです。Expressのインスタンスに接続する方法を何とか考えましょう。
結び:ASP.NET Coreは凄くいいんだけど、情報が少ない・・・
日本語・英語を問わず、ドキュメントが少ない気がしますね~。。。
公式ドキュメントでも解決できない問題もまぁまぁ出ますし。
同じようなハマりをした方の救いになれば幸いです。グッドラック!
記事筆者へのお問い合わせ、仕事のご依頼
当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。
この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。
皆様のご投稿をお待ちしております。