1047: SQL Server インスタンス [Servername\Instance] への接続ができませんでした
症状
リモートのBarTenderシステムデータベースに接続しようとすると、次のエラーメッセージが表示される場合があります:
#1047: SQL-Serverインスタンス [Servername\Instance] への接続ができませんでした。
対象製品
BarTender 2019以降
診断
- クライアント側にもSQL Server Management Studioをインストールします。
- SQL Management Studioから、システムデータベースウィザードで使用しているのと同じユーザー認証情報を使って、中央のSQL Serverインスタンスに接続します。
これが失敗する場合、SQL Serverの設定に問題がある可能性があります。
解決方法
以下の解決策を適用する前に、必ずIT部門またはデータベース管理者にご相談ください。
必要な権限の設定
- SQL Server認証情報を使用する場合は、サーバー側で混合モード認証を有効にしてください:
- SQL Server Management Studio > オブジェクトエクスプローラーでサーバーを右クリックし、プロパティをクリックします。
- セキュリティページで、サーバー認証の項目から新しい認証モードを選択し、OKをクリックします。
- BarTenderシステムデータベースへの接続に使用するアカウントに権限を付与します。アカウント権限の設定方法については、こちらの記事をご参照ください:システムデータベースへの権限設定(動画・5:45)
- Windows認証かSQL Server認証(推奨)どちらで接続するかを決定します。
- 問題が解決しない場合は、以下の設定もお試しください:
システムデータベースがコンピューターAに構成されていて、コンピューターBからリモート接続できない場合(EAエディションでSQL Expressを使用)、以下のヒントをお試しください。
- リモートSQL Serverインスタンスに接続する際、インスタンス名の代わりにIPアドレスとポート(通常は1433)を使用してみてください。
- インスタンス名を使用する場合は、SQL Server側で事前設定が必要です(下記参照)。
SQL Serverインスタンスでリモート接続を有効にする
- SQL Management Studioを開きます。
- 左側のペインでサーバー名を右クリックし、プロパティを選択します。接続タブで、このサーバーへのリモート接続を許可するにチェックが入っていることを確認してください(下図参照)。
SQL Expressサーバーを固定ポートで待ち受けるよう設定する
- SQL Server Configuration Managerを開き、左側のペインでSQL Server Servicesをクリックします。
- プロセスID(PID)列を使って、各サービスのPIDを確認します。SQL Serverの行のPIDを特定し、コマンドプロンプトで以下を入力して、そのPIDが待ち受けているポートを確認します:
netstat -ano | find /i “[SQL ServerのPID番号]"
上記画像の例では、次のようになります:netstat -ano | find /i “668”
- 結果は以下の通りです:
- 手順3のコマンドで結果が表示されない場合、TCP/IPプロトコルが無効になっているため、有効化が必要です。SQL Server Configuration Managerで左側のSQL Server Network Configurationをクリックし、TCP/IPプロトコルを右クリックして有効化を選択します。
- SQL Serverサービスを再起動し、SQLサービスに割り当てられた新しいプロセスIDを確認します。
- コマンドプロンプトで以下のコマンドを実行します:
netstat -ano | find /i “23444”
- 結果は以下の通りです:
- SQL Server Configuration Managerで左側のSQL Server Network Configurationをクリックし、TCP/IPプロトコルを右クリックします。
- プロパティ > IPアドレスに進み、IPAllセクションまでスクロールします。TCP動的ポートの値を削除します(0は入力しないでください)。
- TCPポートに1433を入力し、適用、OKの順にクリックします。
- SQL Serverサービスを再起動し、SQLサービスに割り当てられた新しいプロセスIDを確認し、コマンドプロンプトで以下を実行します:
netstat -ano | find /i “5088”
- 結果は以下の通りです:
この時点で、SQL Expressは標準ポート1433で待ち受けるように設定されています。
SQL Server Browserサービスを有効にする
- SQL Server Configuration Managerを開き、左側のペインでSQL Server Servicesをクリックします。SQL Server Browserサービスを右クリックし、プロパティを選択します。
- サービスタブで、開始モードを自動に変更します。適用、OKの順にクリックします。
- 開始ボタンをクリックして、SQL Browserサービスを起動します。
- 下図のように、SQL Server Browserサービスが起動していることを確認します。
SQL Serverのセキュリティ強化のベストプラクティスによると、SQL Server Browserサービスは無効にすることが推奨されています。このサービスはSQL Serverリソースへのリクエストを正しいポートにリダイレクトしますが、リダイレクターを無効にすることで攻撃経路を減らし、SQL Serverへの侵入経路を隠すことができます。
SQL Server関連のネットワーク通信を許可するようファイアウォールを設定する
WindowsファイアウォールでSQL Serverへのアクセスを許可するため、4つの例外設定が必要です:
-
TCPポート1433のポート例外。新しい受信規則ウィザードで以下の情報を使ってポート例外を作成します:
- ポートを選択
- TCPを選択し、ポート1433を指定
- 接続を許可
- 3つのプロファイル(ドメイン、プライベート、パブリック)すべてを選択
- 規則名は「SQL – TCP 1433」とする
-
UDPポート1434のポート例外。再度新しい規則をクリックし、以下の情報でポート例外を作成します:
- ポートを選択
- UDPを選択し、ポート1434を指定
- 接続を許可
- 3つのプロファイル(ドメイン、プライベート、パブリック)すべてを選択
- 規則名は「SQL – UDP 1434」とする
- sqlservr.exeのプログラム例外。再度新しい規則をクリックし、以下の情報でプログラム例外を作成します:
- プログラムを選択
- 参照をクリックし、sqlservr.exeを以下の場所から選択:C:\Program Files\Microsoft SQL Server\MSSQL11.[INSTANCE_NAME]\MSSQL\Binn\sqlservr.exe ※[INSTANCE_NAME]はご利用のSQLインスタンス名です。
- 接続を許可
- 3つのプロファイル(ドメイン、プライベート、パブリック)すべてを選択
- 規則名は「SQL – sqlservr.exe」とする
-
sqlbrowser.exeのプログラム例外。再度新しい規則をクリックし、以下の情報でプログラム例外を作成します:
- プログラムを選択
- 参照をクリックし、C:\Program Files (x86)\Microsoft SQL Server\90\Shared\sqlbrowser.exeからsqlbrowser.exeを選択
- 接続を許可
- 3つのプロファイル(ドメイン、プライベート、パブリック)すべてを選択
- 規則名は「SQL – sqlbrowser.exe」とする
ご覧の通り、SQL Serverのインスタンス名経由でリモート接続を行うには多くの設定が必要です(セキュリティ上の懸念もあります)。そのため、IPアドレスとポートでの接続を推奨します。