先日SQL Serverを新たに導入したのですが、外部PCから接続できず苦戦しました。
その際に試したことを記録しておきます。
誰かの助けになれば。
##現象と原因予想
DBサーバにSQL Serverをインストールし各種設定を行いました。しかしいざAPサーバからデータベース接続しようとしたところ、何度試しても接続に失敗してしまいます。
A5SQLで接続を試み、下記のメッセージを得ました。
Cannot connect to server on host 'ipadress' Connectiontimed out
原因の切り分けとして、まず同様の操作をDBサーバ内で行いました。
問題なく動作するため、サーバ間の接続(ファイアウォールあたり?)でコケているのかな、と予想しました。
##まず試したこと
まずQiitaの他記事でまとめられているようなことを片っ端から試行/確認しました。
[以下 参考記事]
【TIPS】SQL Server Expressに接続できない
外部のSQL Serverに接続できないときの備忘録
一応書いておくと、確認したのは下記項目です。
・TCP/IP有効化・ポート設定
・Windowsファイアウォール設定
・SQL Server Browserの起動
しかし繋がらない。。。
##他に試したこと
###DB設定
####リモートサーバ接続の許可
MSSMSにて
インスタンスを右クリック
>「サーバのプロパティ」の左側メニュー「接続」をクリック
>「このサーバへのリモート接続を許可する」にチェック
####アクセス権限の設定・確認
私の場合はローカルで接続できたのでここちは問題ないかなと思いつつ一応確認。
①インスタンスの権限
MSSMSにて確認
インスタンスをクリック
>「セキュリティ」>「ログイン」>該当ユーザで右クリック
「ログインのプロパティ」にて
>「ユーザマッピング」操作したいテーブルにチェックがついているか?ロールは適切か?
(接続確認がしたいのでとりあえず「db_owner」にしておく)
>「セキュリティ保護可能なリソース」で「SQLの接続」など必要項目にチェックがついているか?
②データベース権限の確認
インスタンスをクリック
>「データベース」>操作したいデータベース>「セキュリティ」>「ユーザー」>該当ユーザで右クリック
>「メンバーシップ」で「db_owner」にチェックがついているか?
###プログラムの許可
私の場合はこれが原因でした。
Windowsファイアウォールで下記プログラムへの接続を許可する必要があります。
%ProgramFiles%\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Binn\sqlservr.exe
コントロールパネル>システムとセキュリティ>Windowsファイアウォール
>詳細設定>受信の規則>新しい規則
・規則の種類 ... 「プログラム」
・プログラム... 「このプログラムのパス」にパス入力
・操作... 「接続を許可する」
・プロファイル...とりあえず全てに適用
・名前 ... 好きな名前を入力
これでAPサーバから接続できるようになりました。
よかったよかった。