web-dev-qa-db-ja.com

SQL Server Management Studioを使用して、Azure Virtual MachineでホストされているSQL Server Expressインスタンスにリモート接続します

最初の試み

Windows Server 2012にAzure VMがあり、その上にSQL Server 2012 Expressデータベースエンジンコンポーネントをインストールしました。次に、 here の指示に従って、SQL Server Management Studioにリモートで接続しました。

  1. 仮想マシンのTCPエンドポイントを作成します
  2. WindowsファイアウォールでTCPポートを開きます
  3. TCPプロトコルでリッスンするようにSQL Serverを構成します
  4. 混合モード認証用にSQL Serverを構成する
  5. SQL Server認証ログインを作成する
  6. 仮想マシンのDNS名を決定する
  7. 別のコンピューターからデータベースエンジンに接続する

ステップ7の後、次のエラーを受け取りました。

SQL Serverへの接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったか、アクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。 (プロバイダー:名前付きパイププロバイダー、エラー:40-SQL Serverへの接続を開けませんでした)(Microsoft SQL Server、エラー:53)

リモートで接続する前に他に何を設定する必要がありますか?

トラブルシューティング

トラブルシューティングの指示 here に従っています。以下の各ブロック引用は、そのリンクを説明するステップです。

SQL Serverデータベースエンジンのインスタンスがインストールされ、実行されていることを確認します。

できたSQL Server Expressをインストールし、SQLEXPRESSという名前のインスタンスとして実行しています。

名前付きインスタンスに接続しようとしている場合は、SQL Server Browserサービスが実行されていることを確認してください。

できたSQL Server Browserサービスを有効にするために、手順 here を実行しました。

コンピューターのIPアドレスを取得します。

できたこれらは後で接続をテストするために、またおそらくSQLEXPRESSの静的ポートを設定するために使用します。

10.241.62.155

fe80 :: 45c:8c29:e19f:f78b%15

SQL Serverが使用するTCPポート番号を取得します。

できた SQL Server Management Studio サーバーログは、サーバーがポート49169でリッスンしていることを示しました。

プロトコルを有効にする

できた構成マネージャーで既にTCP/IPを有効にしていましたが、念のためSQL Serverサービスを再起動しました。

TCP/IP接続のテスト

できた tcping.exe を使用して接続をテストしました(Azureではcmd pingはすぐに動作しません。)ポート80に接続することができました。

  • tcping.exe buddha.cloudapp.net>成功
  • tcping.exe buddha.cloudapp.net 80>成功

ローカル接続のテスト

できたコマンドプロンプトから sqlcmd.exe を使用し、TCPを介してユーザー名とパスワードを使用してローカルに接続できました。

  • sqlcmd -S Buddha\SQLEXPRESS(共有メモリプロトコルによる成功)
  • sqlcmd -S tcp:Buddha\SQLEXPRESS(TCP経由で成功)
  • sqlcmd -S tcp:Buddha\SQLEXPRESS -U sa -P(TCP経由でユーザー名で成功)
  • sqlcmd -S tcp:10.241.62.155\SQLEXPRESS -U sa -P(内部IPで成功)

ファイアウォールでポートを開く

SQLEXPRESSがリッスンするポートを開きました。サーバーログ(上記)は、SQLEXPRESSがポート49169でリッスンしていることを示しましたが、これは多くの動的ポートの1つにすぎず、静的ポート1435をセットアップする必要がありました。

  • WF.mscを使用して、ポート1435のインバウンドTCPルールを作成します。
  • Azure管理ポータルを使用して、ポート1435のTCPエンドポイントを作成します。

トラブルシューティング手順には次のようにも書かれています

名前付きインスタンスまたはTCPポート1433以外のポートに接続している場合は、UDPポート1434、SQL Server Browserサービス用。

SQLEXPRESS(名前付きインスタンス)を接続しているため、UDP用にポート1434を開く必要がありました。

  • WF.mscを使用して、ポート1434のインバウンドUCPルールを作成します。
  • Azure管理ポータルを使用して、ポート1434のUDPエンドポイントを作成します

名前付きインスタンスへの接続に関するさらなる調査により、動的ポートの問題が明らかになりました。ポート49169(多くの効果的なオプションの1つ)の代わりにポート1435(静的)を使用している理由

SQL Server Express、SQL Server Compact、およびデータベースエンジンの名前付きインスタンスのインスタンスは、動的ポートを使用します。特定のポートを使用するようにこれらのインスタンスを構成するには、 特定のTCPポートでリッスンするようにサーバーを構成する(SQL Server構成マネージャー) および here を参照してください。 。

できた[SQL構成マネージャー]> [SQL Serverネットワーク構成]> [SQLEXPRESSのプロトコル]> [TCP/IP]に移動し、次の操作を行いました。

[プロトコル]タブ> [すべてを聞く]> [いいえ]。

[IPアドレス]タブ>リストされた各アドレス

  • 有効>はい
  • TCP動的ポート>空白(ゼロを削除)
  • TCPポート> 1435(または選択)

SQLEXPRESSサービスを再起動した後、SQL Server Management Studioのログを再度調べたところ、サーバーがポート1435でリッスンしていることがわかりました!!!やった!

接続のテスト

できたローカル(Azure以外)のコンピューターでSQL Server Management Studioを開き、接続しました。

  • buddha.cloudapp.net、1435 OR buddha.cloudapp.net\SQLEXPRESS
  • パスワード

成功。

54
Shaun Luttin

答えが見つかった3つのWebページを次に示します。最も難しい部分は、SQLEXPRESSの静的ポートを設定することでした。

Windows AzureでのSQL Server仮想マシンのプロビジョニング 。これらの最初の指示は回答の25%を提供しました。

SQL Serverデータベースエンジンへの接続のトラブルシューティング方法 。これを注意深く読むと、答えのさらに50%が得られました。

異なるIPアドレスの異なるポートでリッスンするようにSQLサーバーを構成する方法? 。これにより、名前付きインスタンス(SQLEXPRESSなど)の静的ポートのセットアップが可能になりました。答えまでの道のりの最後の25%が必要でした。

18
Shaun Luttin

Names Pipes Providerからエラーを受け取っているという事実は、接続を確立しようとしているときにTCP/IPプロトコルを使用していないことを示しています。 「tcp」プレフィックスを追加して、ポート番号を指定してみてください。

tcp:name.cloudapp.net,1433
14
Paul Keister

私も似たようなものに苦労しました。私の推測では、実際の問題は別のマシンで実行されているSQL Expressインスタンスへの接続です。これを行う手順は、次のように要約できます。

  1. SQL ExpressがWindows認証と同様にSQL認証用に構成されていることを確認します(デフォルト)。これは、SQL Server Management Studio(SSMS)サーバーのプロパティ/セキュリティ経由で行います
  2. SSMSで、「sqlUser」という新しいログインを作成します。たとえば、適切なパスワード「sql」を使用します。この新しいログインが、Windows認証ではなくSQL認証に設定されていることを確認してください。 SSMSサーバーセキュリティ/ログイン/プロパティ/全般。また、「パスワードポリシーを適用する」がオフになっていることを確認します
  3. プロパティ/サーバーロールで、この新しいユーザーに「sysadmin」ロールがあることを確認します
  4. SQL Server構成マネージャーSSCM(SSCMが見つからない場合は、Windows\SysWOW64でSQLServerManagerxx.mscファイルを検索)で、SQLExpressのSQL Serverネットワーク構成/プロトコルで、TCP/IPが有効になっていることを確認します。必要に応じて、名前付きパイプを無効にできます
  5. プロトコルTCP/IPを右クリックし、[IPAddresses]タブで、すべてのIPアドレスが有効に設定されていることを確認しますはい、およびTCPポート1433(これはSQL Serverのデフォルトポートです)
  6. Windowsファイアウォール(WF.msc)で、2つの新しいインバウンドルールを作成します。1つはSQL Server用で、もう1つはSQL Browserサービス用です。 SQL Serverの場合、TCPポート1433を開く必要があります(SQL Serverのデフォルトポートを使用している場合)そして非常に重要なのは、UDPポート1434を開く必要があるSQL Browserサービスの場合 。ファイアウォールでこれらの2つのルールに適切な名前を付けます
  7. SSCMまたはServices.mscスナップインを使用して、SQL Serverサービスを停止して再起動します
  8. Services.mscスナップインで、SQL Browserサービスのスタートアップの種類が自動であることを確認してから、このサービスを開始します

この時点で、SQL認証、ユーザー「sqlUser」、パスワード「sql」を使用して、上記のように構成されたSQL Expressインスタンスにリモートで接続できるはずです。これを確認する最後のヒントと簡単な方法は、デスクトップに「Test.UDL」と言う拡張子.UDLの空のテキストファイルを作成することです。このファイルをダブルクリックして編集すると、Microsoft Data Link Propertiesダイアログが呼び出され、リモートSQL接続をすばやくテストできます

3
JohnB