エラー:233 SQLServerのSQL認証で接続が出来ない場合

スポンサーリンク
SQLServerのアイキャッチ プログラミング

C#でSQLServerに画像を保存し、参照するプログラムを作るに当たり、初めてSQLServerを利用しました。Visual Studioでコーディングしているので、連携機能が優秀そう…と思い、手を付けてみましたが、よくあるエラー2つにハマってしまったので、その経験を共有したいと思います。

【環境・利用ツールなど】

  • Windows10
  • SQL Server Management Studio(以下、SSMSと略)
  • SQL Server 2019 構成マネージャー(※)

※「スタート」からMicrosoft SQL Server 2019のファイルを開くと該当アプリがあります。

エラーの概要

今回発生したエラーの内容と解決のために試したことです。

エラー内容【エラー:233】

SSMSのSQLServer認証でサーバーへの接続を試みるが以下のようなエラーが発生。発生したエラーは2種類あり、エラー1つ目についてはこちらの記事で解決手順を示しましたので、参考にまでにご活用ください。

404 NOT FOUND | 近ため
近大生のための情報サイト

 

では、今回の本題である、2つ目のエラーの内容を確認していきます。まず、サーバーとの接続は出来ているが、ログイン中にエラー233が発生しているとのこと。

エラー233

【エラーの詳細】

===================================

DESKTOP-XXXXXXX\SQLEXPRESS に接続できません。

===================================

サーバーとの接続を正常に確立しましたが、ログイン中にエラーが発生しました。 (provider: Shared Memory Provider, error: 0 – パイプの他端にプロセスがありません。) (.Net SqlClient Data Provider)

——————————
ヘルプを表示するには https://docs.microsoft.com/sql/relational-databases/errors-events/mssqlserver-233-database-engine-error をクリック

——————————
サーバー名: DESKTOP-XXXXXXX\SQLEXPRESS
エラー番号: 233
重大度: 20
状態: 0

エラーの分析

エラーの原因は何なのか、エラーメッセージから分かる範囲で考えてみました。

>サーバーとの接続を正常に確立→とりあえず繋がりはしてる…???

>ログイン中にエラーが発生→ログインアカウントやサーバー側の設定に問題有り???

>パイプの他端にプロセスがありません。→意味不明…。

とりあえずよく分からないので、エラー内容をコピペして検索。すると、名前付きパイプの設定が有効になっていないから起きる的な記事を発見しました。

その記事によると、SQL Server構成マネージャーで詳細設定をいじれるらしいので、開いていきます。

エラー233の解決する手順

具体的には以下の手順でエラーを解決出来ます。

  1. 構成マネージャーで各種設定変更
  2. TCPポート番号を設定
  3. 設定したポート番号のファイアウォールを解除

完結にまとめると上記ですが、これだと流石に分からないと思います。詳しく見ていきましょう。

①構成マネージャーで各種設定変更

「スタート」→Microsoft SQL Server2019フォルダを開き、SQL Server構成マネージャーを開く。

構成マネージャーを開く


 

その時、「このアプリがデバイスに変更を加えることを許可しますか?」と出るので、「はい」を選択します。

変更を加えることを許可


 

SQL Server Configuration Managerが開いたと思います。

続けて、SQL Server構成マネージャー(ローカル)のSQL Serverネットワークの構成>SQLEXPRESSのプロトコルを続けてクリック。

SQLEXPRESSで共有メモリが有効


 

共有メモリをダブルクリック>有効を「いいえ」に変更>OKをクリック(適用>OKでも問題ありません)SQLEXPRESSの共有メモリ設定を無効に


 

警告のメッセージウィンドウが表示されるので、OKします。警告の表示にOK


 

同様に、名前付きパイプ・TCP/IPの状態を「有効」に変更します。それぞれ、ダブルクリックでプロパティを開き、設定してください。

名前付きパイプの設定


 

下の画像のように設定できていたらOKです。

①の設定手順完了


 

続いて、TCPポート番号を設定していきます。

②TCPポート番号を設定

先ほど設定したTCP/IPのプロパティを、再度ダブルクリックで開きます。プロトコルのタブをIPアドレスに切り替えてください。

TCPーIPのプロパティ IPアドレス


 

下の方にスクロールするとIPAllの項目がありますので、TCPポートを選択します。TCPポート


 

TCPポートに49152~65535の間で数字を入力します。※今回は仮に61000を入力しました。入力できれば、OKを押してください。

61000を入力

再度、表示された警告のメッセージウィンドウはOKをクリックしてください。

 

最後に、サーバーを再起動させます。SSMSを一度閉じ、再度開くか、以下の手順で再起動してください。

SQL 構成マネージャーでSQL Serverのサービスをクリック。

SQL Serverのサービス設定画面


 

SQL Server(SQLEXPRESS)を右クリックし、再起動をクリック。

SQLServerEXPRESSを右クリック

以上で、「TCPポート番号を設定」は完了です。最後に、設定したポート番号のファイアウォールを解除します。

③設定したポート番号のファイアウォールを解除

「スタート」からコントロールパネルを開きます。

コントロールパネルを開く


 

Windows Defender ファイアウォールを開きます。※表示が違う方はフォーム右上の検索バーからファイアウォールと検索してください。

Windows Defender ファイアウォール


 

続けて、画面左側にある詳細設定を開きます。

詳細設定を開く


 

左側にある「受信の規則」をクリックし、続けて右側に表示される新しい規則…をクリックします。

新しい受信規則を作成


 

新規の受信の規則ウィザードが開くので、ポートを選択し、「次へ」をクリック。

受信の規則ウィザード-規則の種類


 

特定のローカルポートに先ほど②で設定したポート番号を入力。

受信の規則ウィザード-ポート番号を入力


 

「次へ」>「次へ」と進めると「完了」ボタンがあるフォームに続きます。ここではウィザードに名前と説明を付けます。ここでは、仮にSQL Server EXPRESSとします。

SQLEXPRESS


 

以下のように表示されていれば完了です。

ファイアウォールの設定完了

エラー回避のテスト

では、SSMSを起動し、予め作成したログインアカウントでSQL認証してみます。ユーザ名:test、PW:testと入力し、接続をクリックします。アカウントhの作成についてはこちらの記事を参考にしてください。

SQL認証のログイン画面


 

作成後、下の画像のように、ログインユーザーがtestと表示されていれば接続完了です。お疲れ様でした。

ログイン完了の画面

エラーの解説と対処

今回のエラーの詳細を会社の日報で書いたところ、会社の先輩が解説してくださったので、共有します。(いつも色々教えて下さり、ありがとうございます。)

エラーの解説

【先輩の解説】

・SQL Server EXPRESS(無償版)はWell-knownポート※1でのListen※2ができない。

・SQL ServerのTCP/IPのポート番号は443(無償版ではこれが利用できない)

・Well-knownポートでの接続が出来ない場合、ファイアウォールにブロックされる

・ブロックされないためにポートを設定する必要がある

※1:Well-knownポート…著名なサービスのために事前予約されている0~1023のポート番号のこと。(例:Yahoo→465  Google→587)

※2:Listen…OSにポート番号を設定し、接続要求を受けると処理を行うこと。

安易にポートを設定するとセキュリティリスクが増加します。ポートからデータの送受信が可能なので、増やせば増やすほど、それだけリスクが高まるのは必然です。

先輩は「家でいうと、窓やドアが増えると泥棒が出入りしやすい入り口が増える。それと同じ」と教えてくださいました。分かりやすい…!!!


 

今回のエラーの解決手順を図にまとめるとこんな感じです。

SQL Server接続の仕組み

ポイントだけまとめると、

  1. ポート:443での接続は無償版では不可。FWは通る状態
  2. ポート:61000を設定後、SQLの接続は可能。FWはポート設定されてないため通らない
  3. FWに61000のポートを再追加。FWが通る状態になり、接続可能となる

エラーの対処

エラーが発生した際に自分が行なっていること・気を付けていることを紹介します。

とにかくエラー内容で検索する
ひたすら自分の状況と似たエラーを検索し、そこで示された方法を試してみます。SQL ServerはMySQLやOracleに比べ、情報量が少ないですが、検索すればそれなりには出てきます。その中で、自分に関係のありそうなものを試します。エラーの表示が変わったら、逐一、その内容で検索するとエラー対処の進退が分かります。
StackOverFlowで検索・質問する
海外サイトですが、プログラマー専用のYahoo知恵袋みたいなサイトです。しかも、回答のレベルが高く、利用者も多いため、大抵はここで解決します。自分と同じエラーが無いか調べてもいいですし、なければ、質問もできます。
ただ一つ、英語で検索・質問する必要がある点は注意です。
周りに助けを求める
自分の力ではどうしても分からない場合、誰かに頼るのも選択肢の1つではあります。ただし、「分からないから教えてください」ではなく、「○○を達成したくて、□□なエラーが発生しています。△△や××を試しましたが、解決できませんでした。他にいい方法はありませんか??」といった聞き方をすると、相手も答えや対処法を提示しやすくなります。

以上です。エラーが発生した時は、中々先へ進めず、モヤモヤしますが、調べて解決出来た時の達成感は気持ちいいですね。

当記事が皆さんにとって、解決の一助となれていれば幸いです。それでは、ここまでお読みいただき、ありがとうございました!

コメント

タイトルとURLをコピーしました