none
レンタルVPSでSQLに接続で error 26 RRS feed

  • 質問

  • お世話になります。

    表題の通りレンタルサーバー(VPS)にWindows環境下にMVC5を配置、SQL も配置しました。

    ユーザー新規追加をアプリ側から行いその後に、同じID,パスワードでログインすると error 26 が出ます。詳細下部

    SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL Network Interfaces, error: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました)

    ユーザーの新規登録は、vs2017の吐いたコードの通りで

            // POST: /Account/Register
            [HttpPost]
            [AllowAnonymous]
            [ValidateAntiForgeryToken]
            public async Task<ActionResult> Register(RegisterViewModel model)
            {

           :

            }

    この部分は正しく動作(SQL に正しく説臆されて書き込まれた模様)サーバー側のManagement Studioで確認してもデータが記録されています。

    しかし、同じIDでログインしようとすると上記エラーが出ます。

    レンタルVPSの環境

    KAGOYACLOUD/2

    Windows Server 2016 / SQL 2016

    接続文字列

      <connectionStrings>
        <add connectionString="metadata=res://*/ReportFormModel.csdl|res://*/ReportFormModel.ssdl|res://*/ReportFormModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx.xxx.xxx.xxx;initial catalog=ReportData;Integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" name="ReportDataEntities" providerName="System.Data.EntityClient" />
        <add name="DefaultConnection" connectionString="Data Source=xxx.xxx.xxx.xxx;Initial Catalog=aspnet-ReportForm2-20180622093707;Integrated Security=True" providerName="System.Data.SqlClient" />
        <add name="Entities" connectionString="metadata=res://*/UserModel.csdl|res://*/UserModel.ssdl|res://*/UserModel.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=xxx.xxx.xxx.xxx;initial catalog=aspnet-ReportForm2-20180622093707;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
      </connectionStrings>

    よろしくお願いします。

    2019年3月1日 5:33

回答

  • ferret001さん、こんにちは。フォーラムオペレーターのHarukaです。
    ご返信頂きありがとうございます。

    >data source=xxx.xxx.xxx.xxx\MSSQLSERVER
    使用しているプロバイダはSystem.Data.SqlClientなので、データソースはTCPフォーマットまたは名前付きパイプフォーマットを使用する必要があります。 
    TCPフォーマットは次のとおりです。

    <host name>\<instance name>
    <host name>,<TCP/IP port number>

    xxx.xxx.xxx.xxxをサーバー名に変更してみてください。 
    また、SQL Server Browserサービスが実行されており、TCP / IPプロトコルがSQL Serverに対して有効になっていることを確認してください。 
    接続文字列に必要なすべてのキーワードについては、SqlConnection.ConnectionString Propertyを参照してください。

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
    • 回答としてマーク ferret001 2019年3月7日 2:27
    2019年3月5日 7:31
    モデレータ

すべての返信

  • ferret001さん、こんにちは。フォーラムオペレーターのHarukaです。
    MSDNフォーラムにご投稿くださいましてありがとうございます。

    >provider: SQL Network Interfaces, error: 26 - 指定されたサーバーまたはインスタンスの位置を特定しているときにエラーが発生しました
    →接続文字列 'data source = xxx.xxx.xxx.xxx;'に従って、SQL Serverインスタンスへの接続にIPアドレスを使用していると思います。 
    その場合は、TCP / IPポートを含む接続文字列のすべてのパラメータを完全に指定する必要があります。 
    既定では、SQL Serverはポート1433で実行されています。

    サーバー名\インスタンス名の構文を使用することをお勧めします(SQL ServerBrowserサービスが実行されている必要があります)。


    ファイアウォールも確認してください。 
    SQL Server用のポート(デフォルトのポートは1433)を開いているかどうかを確認してください。 
    SQL Network Interfaces, error: 26 – Error Locating Server/Instance Specifiedをご参照してください。

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
    2019年3月4日 8:01
    モデレータ
  • お世話になります。

    接続文字列の問題というのは想像できるのですが・・・

    data source=xxx.xxx.xxx.xxx\MSSQLSERVER;のように変更してみました。

    Sql Server Configuration Manager状のインスタンス名

    今回は、error 25が出ましたが、同じ理由のようです。

    「SqlException (0x80131904): SQL Server への接続を確立しているときにネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないかアクセスできません。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。 (provider: SQL Network Interfaces, error: 25 - 接続文字列が有効ではありません)]」

    インターネット上のSQLの接続文字列は、単純に下記でつがらないのでしょうか?

    <add name="DefaultConnection" connectionString="Data Source=xxx.xxx.xxx.xxx\MSSQLSERVER;Initial Catalog=aspnetDB;Integrated Security=True;" providerName="System.Data.SqlClient" />

    2019年3月5日 4:07
  • ferret001さん、こんにちは。フォーラムオペレーターのHarukaです。
    ご返信頂きありがとうございます。

    >data source=xxx.xxx.xxx.xxx\MSSQLSERVER
    使用しているプロバイダはSystem.Data.SqlClientなので、データソースはTCPフォーマットまたは名前付きパイプフォーマットを使用する必要があります。 
    TCPフォーマットは次のとおりです。

    <host name>\<instance name>
    <host name>,<TCP/IP port number>

    xxx.xxx.xxx.xxxをサーバー名に変更してみてください。 
    また、SQL Server Browserサービスが実行されており、TCP / IPプロトコルがSQL Serverに対して有効になっていることを確認してください。 
    接続文字列に必要なすべてのキーワードについては、SqlConnection.ConnectionString Propertyを参照してください。

    どうぞよろしくお願いします。


    MSDN/ TechNet Community Support Haruka

    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、
    ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~
    • 回答としてマーク ferret001 2019年3月7日 2:27
    2019年3月5日 7:31
    モデレータ
  • お世話になります。

    そして、ご返事が遅くなr申し訳ありません。

    結論を言いますと、まだ変わっていません。

    error26、で接続できないままです。

    リモートデスクトップ接続でサーバに入り「sqlcmd -H V133-111-xxx.xxx」などとすると入ることができます。

    接続文字列に「Data Source=tcp:V133-11-xxx-xxx,1433;」としたとき接続を拒否されます。

                                                      ↑  ↑  サーバー名

    2019年3月6日 7:41
  • お世話になります。


    結果として接続できるようになりました。

    原因は、うまく説明できているかわかりませんが、下記のようにしたら出来ました。


    IISの接続文字列を見ると

    data source=.\SQLEXPRESS;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|aspnetdb.mdf;User Instance=true
    という行がありました。
    私の作った、WebConfigにはない接続文字列でした。


    で、これを削除して動かしてみると、machin.config内の
    <roleManager>
        <providers>
        <add name="AspNetSqlRoleProvider" connectionStringName="LocalSqlServer" applicationName="/" type="System.Web.Security.SqlRoleProvider, System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/>

    で、エラーが起きます。「ストアド プロシージャ 'dbo.aspnet_CheckSchemaVersion' が見つかりませんでした」

    このエラーを調べても意味が分からずでしたが、よく見るとロールに関するエラーのようです。


    WebConfigのロールの記述があるか見てみると

        <roleManager enabled="true" />

    となっていました。ロールは使用しないのでこの設定になっていることに気づきませんでした。

        <roleManager enabled="false" />

    することでアクセス可能になりました。

    この説明が正しいのか、解決策だったのか分かりませんが、ありがとうございました。

    2019年3月7日 2:27