none
SQLServerにWindows認証で接続する際の名前解決について RRS feed

  • 質問

  • いつもお世話になっております。

    以下の環境でクライアントPCからDBサーバのSQLServerに接続しています。
    ・DBサーバ  :OS:WindowsServer2012R2 Standard
             DB:SQLServer2012 Standard
             ドメイン環境
             DBサーバで起動しているサービスはSQLServerとSQLServerエージェントのみ。
    ・クライアント:OS:Windows8.1 Pro
            NativeClient2012でDB接続
            非ドメイン環境
            ※クライアントはSQLServerにログインできるドメインのアカウントに偽装後、
             Windows認証でSQLServerに接続している。
             DBの接続文字列にはIPとポート指定を使用している。
    ・FireWall
     DBサーバとクライアント間はFireWallによって、
     TCP1433のSQL接続用のポートのみが空いている。

    上記の様な状態でSQLServerに接続すると10秒程度待ちが発生します。
    通信のパケットを見ると名前解決で待ちが発生しているようです。
    IPからホスト名の逆引きの名前解決を行っているように思います。
    確かにHOSTSファイルにもDNSにもDBサーバの情報を記載していないので
    名前解決できないのですが、最終的には接続できるため、
    不要な名前解決を行っていることを不思議に思うのと同時に
    できれば名前解決を回避できないかと思っています。

    長くなりましたが、質問は以下の二点です。
    1.Windows認証かつIP指定の場合にSQLServerがIPアドレスとホスト名の
      逆引き名前解決を行っている理由は何でしょうか。
    2.Windowsの一般的な話になるのですが、
      HOSTSやDNSでの名前解決ができない状況において名前解決がタイムアウトに
      なるまでの時間というのは決められているのでしょうか?
      また、何らかの設定によって変更できるものなのでしょうか?
      その設定によって名前解決できなかった場合の時間を短縮できればよいと思っています。

    よろしくお願いします。

    2015年6月9日 10:13

回答

  • 接続に関する話ですので、少なくともプロトコル(複数使用可にしている場合はその優先順位も)と、既定のインスタンスか名前付きインスタンスかの区別、といったあたりの情報が無いと回答しづらいかと。

    仮に、 TCP/IP プロトコルを優先順位 1 位で設定していて名前付きインスタンスの場合を考えると、 SQL Server Browser サービスへの問い合わせ前に OS レベルでのセッション確立に際して逆引きの名前解決が行われます。
    SQL Server Browser サービスへの問い合わせが名前解決で得られた名前で行われるため、これは仕様です。

    その他色々と設定によって話は変わってしまい全てのケースをここでお答えするのは現実的な時間では無理ですので、これ以上は割愛します。

    名前解決のタイムアウトは SQL Server での話ではありませんので、適切なカテゴリでご質問ください。
    一応 17 秒ぐらいだったと思いますが、カテゴリ違いなので詳細は割愛します。


    MCITP(Database Developer/Database Administrator)



    2015年6月11日 14:37
  • フォーラム オペレーターの星 睦美です。
    こーひーすなば さん、こんにちは。

    OS での名前解決に関してはWindows Server 2012 フォーラムで質問いただくと役立つ回答があるのではないかと思います。

    SQL Server で行っている認証に関してはMSDN ライブラリに説明がありますのでご紹介させていただきます。

    (参考情報)認証 [SQL Server]
    https://msdn.microsoft.com/ja-jp/library/bb669066(v=vs.110).aspx

    今回の質問に関連があるかどうか私のほうでは分からないのですが、以下のサポート技術情報に「Windows Server 2012 では自身のホスト名に対する名前解決の内部動作が変更されている」とあります。Windows Server の動作を検証いただく際の参考までにご紹介しておきますね。

    ・Windows Server 2012 ではサポート技術情報 981953 の対処策が使用できません。
    https://support.microsoft.com/en-us/kb/2854670/ja


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年6月12日 1:41

すべての返信

  • 接続に関する話ですので、少なくともプロトコル(複数使用可にしている場合はその優先順位も)と、既定のインスタンスか名前付きインスタンスかの区別、といったあたりの情報が無いと回答しづらいかと。

    仮に、 TCP/IP プロトコルを優先順位 1 位で設定していて名前付きインスタンスの場合を考えると、 SQL Server Browser サービスへの問い合わせ前に OS レベルでのセッション確立に際して逆引きの名前解決が行われます。
    SQL Server Browser サービスへの問い合わせが名前解決で得られた名前で行われるため、これは仕様です。

    その他色々と設定によって話は変わってしまい全てのケースをここでお答えするのは現実的な時間では無理ですので、これ以上は割愛します。

    名前解決のタイムアウトは SQL Server での話ではありませんので、適切なカテゴリでご質問ください。
    一応 17 秒ぐらいだったと思いますが、カテゴリ違いなので詳細は割愛します。


    MCITP(Database Developer/Database Administrator)



    2015年6月11日 14:37
  • フォーラム オペレーターの星 睦美です。
    こーひーすなば さん、こんにちは。

    OS での名前解決に関してはWindows Server 2012 フォーラムで質問いただくと役立つ回答があるのではないかと思います。

    SQL Server で行っている認証に関してはMSDN ライブラリに説明がありますのでご紹介させていただきます。

    (参考情報)認証 [SQL Server]
    https://msdn.microsoft.com/ja-jp/library/bb669066(v=vs.110).aspx

    今回の質問に関連があるかどうか私のほうでは分からないのですが、以下のサポート技術情報に「Windows Server 2012 では自身のホスト名に対する名前解決の内部動作が変更されている」とあります。Windows Server の動作を検証いただく際の参考までにご紹介しておきますね。

    ・Windows Server 2012 ではサポート技術情報 981953 の対処策が使用できません。
    https://support.microsoft.com/en-us/kb/2854670/ja


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2015年6月12日 1:41
  • nagino - 引退エンジニアさん

    ご返信ありがとうございます。

    確かにOSでの話ですね。
    ご指摘ありがとうございました。

    ちなみにですが、
    接続に使用しているプロトコルはTCP/IPのみにしてあります。
    SQLServerBrowserサービスは停止済みです。
    ただ、今のところ名前解決しにいっているようです。

    まだ何か設定が不足しているのか、
    どうやっても名前解決するのが使用なのかを判断するのは難しそうですね。

    OSの方でも質問してみようかと思います。
    クライアントはWin8.1ですが現状は10秒程度の待ちのように感じました。
    余談ですが、C#のGetHostEntryで無理な名前解決をしたときも
    10秒程度の待ちだったので、現状OSの名前解決は10秒程度のタイムアウトに
    なっているのかなーと簡単な推測をしてみました。

    2015年6月12日 3:01
  • 星 睦美さんご連絡ありがとうございます。

    ご紹介して頂いたページをみて勉強しようと思います。

    ありがとうございました。

    2015年6月12日 3:01