ホームサーバーにSQL Server Express 2012をインストールしました。デスクトップPCからVisual Studio 2012から接続しようとしていますが、よく知られているエラーが繰り返し発生します。
SQL Serverへの接続を確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからなかったかアクセスできませんでした。インスタンス名が正しいこと、およびSQL Serverがリモート接続を許可するように構成されていることを確認してください。 (プロバイダ:名前付きパイププロバイダ、エラー:40 - SQL Serverへの接続を開けませんでした)
これを直すために私がしたこと:
SQL Server 2012 Expressにリモート接続を許可するにはどうすればよいですか。
うーん、 聞いてよかった 。私がついに発見した解決策はここにありました:
ポート1433でリモートのTCP/IP接続を許可するようにSQL Server Expressを設定する方法
これまでのところ、とても良い、そして完全に期待されています。しかしその後:
(また、これらの手順を実行する場合、SQL Server Browserを有効にするにはnotが必要であり、1434ではなくポート1433のみを許可する必要があります。)
これらの追加の5つの手順は、以前のバージョンのSQL Server、Expressなどで行ったことがあったことを私が今まで覚えていないものです。デフォルトのインスタンスではなく、サーバー上で名前付きインスタンス(myservername\SQLEXPRESS)を使用しているため、これらは必要なようです。こちらを参照してください。
リモートのSQL Serverに接続する正しい方法 (UDPポート1434を開いてSQL Serverブラウザを有効にしないで) は、 named instance の代わりに ipとport を使用することです。
名前付きインスタンスの代わりにipとportを使用すると、攻撃対象領域が減少するため、安全です。
たぶん2枚の写真が2000言葉を話す...
この方法は指定されたポートを使用します(これは私が信じているもののほとんどです)..
この方法では、UDPポート1434を開いてSQL Serverブラウザを実行する必要があります。
もう一つ...
Kyralessaは素晴らしい情報を提供していますが、この記事の後でさえ困った場所を追加するためのもう1つのことがあります。
「SQL Serverネットワーク構成」>「サーバーのプロトコル」>「TCP/IP有効」の下にあります。 TCP/IPを右クリックして、プロパティを選択します。 IPアドレスの下では、使用している接続の種類ごとに[有効]を[はい]に設定する必要があります。
あなたはこの問題を解決するためにこれを使うことができます:
START> EXECUTEの順に進み、 CLICONFG.EXEを実行します。
名前付きパイププロトコルは、リストの最初に表示されます。それを削除し、TCP/IPを推進してください。
アプリケーションを徹底的にテストします。
これが助けになれば幸いです。
また設定することができます
NOを聴く
プロトコルダイアログで、そしてIPアドレスIP1で(例えば)
[はい]に設定します。
iPアドレスを定義します。
TCP動的を空白に設定し、
1433へのTCPポート(または何でも)
デフォルト設定でインストールされたSQL Server 2012 Developer Editionのインストールでは、SQL Server構成マネージャー - > SQL Serverネットワーク構成 - > MSSQLSERVERのプロトコルをロードし、TCP/IPを無効から有効に変更する必要がありました。
私は、UDPポート1434を開くためにファイアウォールのインバウンドポートルールを追加しなければなりませんでした。これはSql Server Browserが待機しているものです。
ローカルにインストールされた名前付きインスタンスのSQL Server 2014でも同じ問題が発生しました。 FQDN\InstanceName
を使用した接続は失敗しましたが、私のhostname\InstanceName
のみを使用した接続は機能しました。たとえば、mycomputername\sql2014
を使用した接続は機能しましたが、mycomputername.mydomain.org\sql2014
を使用した接続は機能しませんでした。 DNSは正しく解決され、TCP/IPはSQL構成マネージャー内で有効になり、Windowsファイアウォールルールが追加されました(そして、テストのためにファイアウォールをオフにして、何もブロックしていないことを確認しました)が、いずれも問題を修正しませんでした。
最後に、SQL Serverで「SQL Server Browser」サービスを開始する必要があり、接続の問題が修正されました。
SQL Server Browserサービスが実際にSQL Serverの接続を支援していることに気付いたことはありませんでした。接続するサーバーを「参照する」をクリックしたときにドロップダウンを埋めるのに役立つだけの印象を受けましたが、実際には、ポート番号が明示的に割り当てられていない場合、クライアント要求を使用する正しいポート番号に合わせるのに役立ちます(同様の複数のウェブサイトをホストするIISウェブサーバーで同じ問題を軽減するためにウェブサイトバインディングがどのように役立つか)。
この接続項目は、SQL Server Browserサービスに関する手がかりを与えてくれました: https://connect.Microsoft.com/SQLServer/feedback/details/589901/unable-to-connect-on-localhost-using- fqdn-machine-name
- サーバー名としてwstst05\sqlexpressを使用すると、クライアントコードはインスタンス名からマシン名を分離し、wstst05はnetbios名と比較されます。それらが一致しても問題はなく、接続はローカルと見なされます。そこから、必要な情報を取得し、SQL Browserに接続せずに、共有メモリ経由でSQLインスタンスに問題なく接続します。
- wstst05.capatest.local\sqlexpressを使用すると、クライアントコードは名前(wstst05.capatest.local)とnetbios名(wstst05)の比較に失敗し、接続を「リモート」と見なします。これは仕様によるものであり、将来的に改善することを検討します。とにかく、リモート接続と名前付きインスタンスであるという事実を考慮すると、クライアントは名前解決にSQLBrowserを使用する必要があると判断します。 wstst05.capatest.local(UDPポート1434)でSQL Browserに接続しようとしますが、明らかにその部分は失敗します。したがって、エラーが発生します。
TechNetの「SQL Server Browser」サービスの理由(強調は私が追加): https://technet.Microsoft.com/en-us/library/ms181087(v = sql.120).aspx
「SQL Server Browserの使用」セクションから:
SQL Server Browserサービスが実行されていない場合でも、正しいポート番号または名前付きパイプを指定すると、SQL Serverに接続できます。たとえば、ポート1433で実行されている場合、TCP/IPを使用してSQL Serverの既定のインスタンスに接続できます。ただし、SQL Server Browserサービスが実行されていない場合、次の接続は動作しない:
- すべてのパラメーター(TCP/IPポートまたは名前付きパイプなど)を完全に指定せずに名前付きインスタンスに接続しようとするコンポーネント。
- 後で再接続するために他のコンポーネントが使用できるserver\instance情報を生成または渡すコンポーネント。
- ポート番号またはパイプを提供せずに名前付きインスタンスに接続する。
- TCP/IPポート1433を使用しない場合、名前付きインスタンスまたはデフォルトインスタンスへのDAC。
- OLAPリダイレクタサービス。
- SQL Server Management Studio、Enterprise Manager、またはQuery Analyzerでのサーバーの列挙。
クライアントサーバーシナリオでSQL Serverを使用している場合(たとえば、アプリケーションがネットワーク経由でSQL Serverにアクセスしている場合)、SQL Server Browserサービスを停止または無効にする場合は、各インスタンスに特定のポート番号を割り当て、常にそのポート番号を使用するようにクライアントアプリケーションコードを記述します。このアプローチには次の問題があります:
- クライアントアプリケーションコードを更新および保守して、適切なポートに接続していることを確認する必要があります。
- 各インスタンスに選択したポートは、サーバー上の別のサービスまたはアプリケーションによって使用され、SQL Serverのインスタンスが使用できなくなる場合があります。
「SQL Server Browserの仕組み」セクションの同じ記事の詳細情報:
SQL Serverの1つのインスタンスのみがポートまたはパイプを使用できるため、SQL Server Expressを含む名前付きインスタンスに異なるポート番号とパイプ名が割り当てられます。既定では、有効にすると、名前付きインスタンスとSQL Server Expressの両方が動的ポートを使用するように構成されます。つまり、SQL Serverの起動時に使用可能なポートが割り当てられます。必要に応じて、特定のポートをSQL Serverのインスタンスに割り当てることができます。接続時に、クライアントは特定のポートを指定できます。ただし、ポートが動的に割り当てられている場合、SQL Serverを再起動するたびにポート番号が変更される可能性があるため、クライアントは正しいポート番号を認識できません。 ... SQL ServerクライアントがSQL Serverリソースを要求すると、クライアントネットワークライブラリは、ポート1434を使用してUDPメッセージをサーバーに送信します。SQLServer Browserは、要求されたインスタンスのTCP/IPポートまたは名前付きパイプで応答します。クライアントアプリケーションのネットワークライブラリは、目的のインスタンスのポートまたは名前付きパイプを使用してサーバーに要求を送信することにより、接続を完了します
それはIPの詳細な設定を必要としないので、私は "Rosdi Kasim"の方法を好みます。
また別のサーバーを立ち上げようとしたときには、忘れてしまいます。
Sql Server Browserサービスを有効にして単純なバカ(KISS)にし、サーバーに接続するときにIPの後ろに\ SQLEXPRESSを追加します。
"\ SQLEXPRESS"なしで直接IPを使用するのは、デフォルトのポートを使用しないので、私の失敗のポイントでした。
ありがとう。
Configuration Managerでポートを追加し、SQL接続にポート番号を追加する必要がありました [Host]\[db instance name]、1433
instancenameとportの間の、(カンマ)に注意してください
これまでに述べたすべての答えとは異なる問題がありました。
SQL Server Expressではなく、Visual Studioで持っていましたが、解決策はまったく同じでなければならないということから始めましょう。
まあ、神様、それは実際には本当に単純で多分少しばかげているかもしれません。私がデータベースを作成しようとしたとき、Visual StudioがSQL Serverの名前を提案したとき、それは私に私のWindowsユーザー名を与えました、そしてそれは実際に私がそれに行ったサーバーの名前です。
実際には、実際には私のWindowsユーザー名+ \SQLEXPRESS
でした。設定を変更しなかった場合、これもおそらくあなたのものです。うまくいったら、読むのをやめなさい。これが私の答えです。うまくいかない場合は、名前が違うかもしれません。
私と同じように、あなたがあなたのものがこれらのステップに従うのをチェックするためにVisual Studioでこの問題を抱えていただけなら:
これはサーバの名前であり、これはあなたが接続を試みるべきものです! Visual Studioが提案するものではありません。
もう1つ確認すべきことは、名前付きインスタンスのスペルが正しいことです。
この記事は、接続の問題のトラブルシューティングに非常に役立ちます。 SQL Serverデータベースエンジンへの接続のトラブルシューティング方法
私の場合、データベースは標準以外のポートで実行されていました。接続しているポートが、データベースが稼働しているポートと同じであることを確認してください。 SQL Serverのインスタンスがさらにある場合は、正しいインスタンスを確認してください。
SQL Serverへの接続に問題がありますか?
ファイアウォールを切断してみてください。
ファイアウォールを切断した状態で接続できる場合、 "sql service broker"のようないくつかの入力規則を見逃している可能性があるので、この入力規則をファイアウォールに追加してください。
"SQL ADMIN CONNECTION" TCPポート1434
「SQL ADMIN CONNECTION」UDPポート1434
"SQL分析サービス" TCPポート2383
"SQL BROWSE分析サービス" TCPポート2382
"SQLデバッガ/ RPC" TCPポート135
"SQL SERVER" TCP PORT 1433、その他動的ポートがある場合はその他
"SQL SERVICE BROKER" TCPポート4022
あなたがする必要があるのはサーバーのファイアウォールの関連ポートを開くことだけです。