none
既定のインスタンス RRS feed

  • 質問

  • WindowsServer2008R2 + SQLServer2008R2 でdbサーバを立てます。

    このとき、サーバのコンピュータ名は「netdk001」、

    既定のインスタンス名は「vmsdb002」としたいのですが、

    どのような方法で実現できますか?

    2010年11月8日 5:35

回答

  • 「vmsdb002」のみでプログラムから接続したいのです。

    そのプログラムは、接続文字列をMy.Settingsに持っていますが、プログラムへの変更を極力避けたいのです。

    SQL Serverへは、コンピューター名\インスタンス名 で位置を特定して接続します。既定のインスタンスは省略できるので、その場合はコンピューター名だけで接続できます。つまり、「vmsdb002」のみでプログラムから接続したい場合、「vmsdb002」はコンピューター名を指すことになりますので、少なくともvmsdb002という名前のコンピューター名のサーバーが存在していなければなりません。言い換えれば、「vmsdb002」のみでプログラムから接続する場合、それはvmsdb002というコンピューター名の既定のインスタンスに接続することを意味します。
    したがって、既定のインスタンス名の変更の問題ではないと思われます。佐祐理さんが回答されている通り、サーバーのコンピューター名をvmsdb002に変更するのが一つの選択肢ですし、それができないのであればMy.Settingsの接続文字列を変更するしかないでしょう。本来、プログラムに手を入れなくても良いようにプログラムから独立したMy.Settingsというところで接続文字列を一元管理するようになっています。コンパイルし直すという意味では同じですが・・・
    一つの例ですが、ユーザーがログイン認証された後、認証サーバーから接続文字列を取得する方法もあります。これであればローカルに全く接続文字列を持たないため、特にSQLサーバー認証の場合(基本的にすべきではない認証ですが)、セキュリティ的にも向上します。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク x47 2010年11月11日 2:52
    2010年11月8日 7:17

すべての返信

  • 既定のインスタンス名(MSSQLSERVER) を変更することは出来ないとおもいます。

    名前付きインスタンスで "vmsdb002" にされてはどうでしょう。

    2010年11月8日 6:11
  • 返信ありがとうございます。

    名前付インスタンスにした場合、「コンピュータ名¥vmsdb002」になると思いますが、どうでしょうか?

    「vmsdb002」のみでプログラムから接続したいのです。

    そのプログラムは、接続文字列をMy.Settingsに持っていますが、プログラムへの変更を極力避けたいのです。

    2010年11月8日 6:27
  • >既定のインスタンス名は「vmsdb002」としたいのですが、

    変更したい目的は何でしょうか?

    もし、1433ポートを使いたいということであれば、名前付きインスタンスを作ってSQL Server構成マネージャのプロトコル TCP/IPから動的ポートの設定を外して1433で待つようにしてみては?

     

    2010年11月8日 6:27
  • コンピューター名が書かれているから怪しいと思っていました。コンピューター名をvmsdb002にすればいいのでは?
    • 回答としてマーク x47 2010年11月11日 2:52
    • 回答としてマークされていない x47 2010年11月11日 2:52
    2010年11月8日 6:37
  • 返信ありがとうございます。

    一番単純で簡単なのは提示頂いた方法なのですが、コンピュータ名を変更せずに実現するのは難しいでしょうか??
    2010年11月8日 6:54
  • 返信ありがとうございます。

    dbサーバリプレースの作業をするのですが、既存のdbの名前が「vmsdb002」なのです。
    その名前を変更してしまうと、プログラムの中に組み込まれている接続文字列も変更しないといけなくなります。
    しかしプログラム改修の作業は契約外なのです。
    2010年11月8日 7:13
  • > 名前付インスタンスにした場合、「コンピュータ名¥vmsdb002」になると思いますが、どうでしょうか?
    > 「vmsdb002」のみでプログラムから接続したいのです。

    「コンピュータ名」のみで接続できていたのではないでしょうか?
    (vmsdb002 のみで接続されていたのでしたら、それはコンピュータ名ではないでしょうか)
    (この確認は無視してください。)

    もしその場合は、クライアント側で「別名」を定義されてはいかがでしょうか?

    SQL Server 2005 または SQL Server 2000 の名前付きインスタンスに以前のバージョンの SQL Server のクライアント ツールを使用して接続する方法
    http://support.microsoft.com/kb/265808/ja

    2010年11月8日 7:17
  • 「vmsdb002」のみでプログラムから接続したいのです。

    そのプログラムは、接続文字列をMy.Settingsに持っていますが、プログラムへの変更を極力避けたいのです。

    SQL Serverへは、コンピューター名\インスタンス名 で位置を特定して接続します。既定のインスタンスは省略できるので、その場合はコンピューター名だけで接続できます。つまり、「vmsdb002」のみでプログラムから接続したい場合、「vmsdb002」はコンピューター名を指すことになりますので、少なくともvmsdb002という名前のコンピューター名のサーバーが存在していなければなりません。言い換えれば、「vmsdb002」のみでプログラムから接続する場合、それはvmsdb002というコンピューター名の既定のインスタンスに接続することを意味します。
    したがって、既定のインスタンス名の変更の問題ではないと思われます。佐祐理さんが回答されている通り、サーバーのコンピューター名をvmsdb002に変更するのが一つの選択肢ですし、それができないのであればMy.Settingsの接続文字列を変更するしかないでしょう。本来、プログラムに手を入れなくても良いようにプログラムから独立したMy.Settingsというところで接続文字列を一元管理するようになっています。コンパイルし直すという意味では同じですが・・・
    一つの例ですが、ユーザーがログイン認証された後、認証サーバーから接続文字列を取得する方法もあります。これであればローカルに全く接続文字列を持たないため、特にSQLサーバー認証の場合(基本的にすべきではない認証ですが)、セキュリティ的にも向上します。

     


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    • 回答としてマーク x47 2010年11月11日 2:52
    2010年11月8日 7:17
  • あんまりお勧めしませんが、リプレイスなのであれば、複数のコンピューター名を持たして逃げるとか・・・

    @IT:Windows TIPS -- Tips:システム移行などのために複数のコンピュータ名を付ける
    http://www.atmarkit.co.jp/fwin2k/win2ktips/373mltname/mltname.html

    2010年11月8日 7:25
  • そのページにやり方書かれてるのかな?

    DBに接続するクライアント側で、SQL Server構成マネージャーを開き「SQL Native Client 10.0の構成」-「別名」に登録することでできるやもしれません。Native Clientを使用していない時にどこまで有効なのかよく知りません。

    http://msdn.microsoft.com/ja-jp/library/ms181035.aspx

    2010年11月8日 7:32
  • なるほど。別名は使ったことが無いので知りませんでした。以下に、「接続のためにサーバー名以外の名前を使用する場合には、別名を作成してください。」とあるので、できそうですね。勉強になりました。

    [別名 - 新規] ダイアログ ボックス ([別名] タブ)
    http://msdn.microsoft.com/ja-jp/library/ms188635.aspx


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
    2010年11月8日 7:41
  • trapemiya様
    SQL Serverへは、コンピューター名\インスタンス名 で位置を特定して接続します。既定のインスタンスは省略できるので、その場合はコンピューター名だけで接続できます。つまり、「vmsdb002」のみでプログラムから接続したい場合、「vmsdb002」はコンピューター名を指すことになりますので、少なくともvmsdb002という名前のコンピューター名のサーバーが存在していなければなりません。言い換えれば、「vmsdb002」のみでプログラムから接続する場合、それはvmsdb002というコンピューター名の既定のインスタンスに接続することを意味します

    その通りだと思います。

    しかし、既存のシステムがそのように動いている以上、何らかの手段があるのではと思いました。

    ちなみに既存システムは Windows2003Server+SQLServer2005 です。再度クライアントを調査する必要があると思います。

    コンパイルし直すという意味では同じです
    再コンパイル=プログラムの変更と認識しています。
    ユーザーがログイン認証された後、認証サーバーから接続文字列を取得する方法もあります。これであればローカルに全く接続文字列を持たないため、特にSQLサーバー認証の場合(基本的にすべきではない認証ですが)、セキュリティ的にも向上します
    その方法は存じませんでした。ありがとうございます。
    2010年11月8日 8:38
  • Chuki様

    大胆な手段ですね。この方法も存じ上げませんでした。提供ありがとうございます。

    2010年11月8日 8:41
  • 佐祐理様

    クライアント側における別名での接続は確認しています。ありがとうございます。

    2010年11月8日 8:46
  • 解決しました。
    結論として、ユーザー様クライアントマシンの接続文字列と、ソースプログラムの接続文字列が違っており、
    ユーザ様の接続文字列のDataSourceにはサーバ名である「NETDK001」の文字が書かれていました。
    頂いたソースプログラムと、現状使用されているプログラムに差異があるようです。

    現状のクライアントはそのままで、dbサーバを現状のものと同じ設定にすれば大丈夫そうです。

    皆さんご意見ありがとうございました。
    2010年11月11日 2:51