none
開発機から本番機にアプリを移行した際に、DBと上手く接続できません。 RRS feed

  • 質問

  • 開発機で作成したアプリケーションを本番機に移した際に、正常に動作せず困っております。

    Windows XPでVWDを利用して作成したASP.NETのアプリケーションを、

    Windows 2008 Server R2 に移して起動したいのですが、その構成が上手くいきません。

    ちなみにどちらもIISを利用してWebサイトを起動することは出来ており、

    VWDを起動していない状態でも開発機では動作しています。

    また、本番機でもトップページにはアクセスできるのですが、

    そのページに設けてあるログイン機能を利用して画面遷移を行うと、以下のようなエラーが出て失敗します。

    「CREATE DATABASE 権限がデータベース 'master' で拒否されました。」  

    ASPXファイルはもちろん、データが入ったMDFファイルも同じ構成で移行しています。  

    XPでの開発時には特に意識していなかったのですが、現在はアプリケーションサーバやODBCの設定などが問題か?と思っています。

    ただ、参考になる資料が見つからず、試行錯誤を続けている状態です。

    過去の質問を見て色々と試したりもしましたが、どうにも上手くいかなかったため投稿いたしました。

    恐れ入りますが、アドバイスをお願いします。


    • 編集済み joynus 2012年4月6日 8:48
    2012年4月6日 8:48

回答

  • > ASPXファイルはもちろん、データが入ったMDFファイルも同じ構成で移行しています。

    えと、ASP.NETの機能としての認証を利用している、ということでいいですかね。
    その場合、開発環境ではSQL Server Express Edition特有の機能であるユーザーインスタンス、という仕組みが使われています。
    サーバー機にSQL Server Express Editionがインストールされていれば一応動くはず、ですが。。。

    ただ、ユーザーインスタンスをそのまま運用環境で利用するべきかどうかきちんと考慮する必要はあります。

    SQL Severについての知識がないとこのあたりサーバー上で動作させることができません。
    Express EditionでないSQL Serverを利用する場合、MDFファイルをアタッチするとか、あらためて認証用のDBおよびテーブルを作成するとかの作業が必要になります。

    そのような観点からいろいろ調べてみるといいかと思います。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答の候補に設定 山本春海 2012年4月17日 9:04
    • 回答としてマーク 山本春海 2012年4月27日 6:30
    2012年4月9日 2:50
  • > ■実環境 Microsoft Windows Server 2008 R2 Standard
    > SQL Server management Studio IIS7.0 

    Windows Server 2008R2 なら IIS のバージョンは 7.5 のはずで
    す。


    > SQL Serverについてはよくわかっていないのですが、VWDをイン
    > ストールする際にオプションとして入れた記憶がありますので、
    > おそらくExpress editionだと思います。

    質問者にしか分らないことなのに「おそらく・・・思います」では
    答えようがないです。

    それが分らないと、こちらも想像でレスするしかないし、想像が実
    際と違っていると混乱のもとになるだけですので。

    Express Edition か否か、ユーザーインスタンスを利用した接続に
    なっているか否かは特に重要なことです。開発環境、運用環境両方
    をきちんと調べてください。


    > ユーザーインスタンスの設定についても、申し訳ないのですがよ
    > くわかっておりません。

    Express 版の Visual Web Developer を使って SQL Server への接
    続を設定すると自動的にユーザーインスタンスを利用した接続にな
    るよう接続文字列が自動生成されるはずです。ユーザーインスタン
    スについては以下のページが参考になりませんか。

    ユーザーインスタンス
    http://surferonwww.info/BlogEngine/post/2010/09/14/User-Instance-of-SQL-Server-Express.aspx


    > web.config内に接続文字列の設定があれば自動でつながるもの
    > と思いました。

    開発環境では Express Edition の SQL Server のユーザーインスタ
    ンスに、運用環境では既定のインスタンスに接続する(普通はそう
    するはずです)とすれば、同じ接続文字列では絶対につながりませ
    ん。

    また、既定のインスタンスに接続しようとすると、その前に、アタ
    ッチ、ログインユーザーの作成、ユーザー権限の設定といった操作
    が必要になります。

    DB のアタッチ
    http://surferonwww.info/BlogEngine/post/2010/09/13/ACL-setting-and-database-attaching-in-SQL-Server.aspx

    ユーザー権限の設定
    http://surferonwww.info/BlogEngine/post/2010/09/12/Setting-user-access-right-in-SQL-Server.aspx


    > ユーザー権限の設定というのは、Forms認証特有の問題なのでしょ
    > うか。 それとも、SQL Serverの問題でしょうか。

    少なくともエラーメッセージからは SQL Server の問題であること
    は間違いなさそうです。


    サーバー構築にほとんど経験・知識がないようですが、そうであれ
    ば、Windows Server, SQL Server, IIS の本を買って基礎的な知識
    を得ることをお勧めします。

    また、開発マシンの OS は XP だそうですが、できるだけ IIS の
    バージョンが運用環境と同じ OS(今回の場合、64-bit の Windows
    7 Professional 版以上)を使い、IIS 上で Web アプリを動かして
    開発することをお勧めします。

    • 回答の候補に設定 山本春海 2012年4月17日 9:04
    • 回答としてマーク 山本春海 2012年4月27日 6:30
    2012年4月9日 11:37
  • > ユーザーインスタンスはまだ確認できていません。

    接続文字列で User Instance が true(デフォルトは false)に設定
    されているかどうかで確認できます。

    SqlConnection.ConnectionString プロパティ
    http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectionstring%28v=vs.100%29.aspx

    ユーザーインスタンスと規定のインスタンスで、Visual Studio で接
    続文字列を自動生成させると、それぞれ以下のような感じになります。
    (VWD Express は既定のインスタンスには接続できないので注意して
    ください)

    ユーザーインスタンス

    Data Source=.\SQLEXPRESS;
    AttachDbFilename=|DataDirectory|\<mdf ファイル名>;
    Integrated Security=True;
    Connect Timeout=30;
    User Instance=True

    規定のインスタンス

    Data Source=.\SQLEXPRESS;
    Initial Catalog=<データベース名>;
    Integrated Security=True

    • 回答の候補に設定 山本春海 2012年4月17日 9:04
    • 回答としてマーク 山本春海 2012年4月27日 6:30
    2012年4月11日 11:50

すべての返信

  • ユーザー権限の設定の問題のように見えますが、質問に書いてあるだけの情報で
    は分かりません。

    DB サーバーは SQL Server でしょうか? 認証方式は ASP.NET 標準の Forms 認
    証でしょうか? SQL Server は、開発環境では Express Edition でユーザーイ
    ンスタンスに接続しているのでしょうか? 実環境ではどうしているのですか?

    もっと詳しい情報を書いていただけると、問題解決のためのお役に立てるかもし
    れません。


    • 編集済み SurferOnWww 2012年4月6日 13:57 誤字訂正
    2012年4月6日 13:55
  • > ASPXファイルはもちろん、データが入ったMDFファイルも同じ構成で移行しています。

    えと、ASP.NETの機能としての認証を利用している、ということでいいですかね。
    その場合、開発環境ではSQL Server Express Edition特有の機能であるユーザーインスタンス、という仕組みが使われています。
    サーバー機にSQL Server Express Editionがインストールされていれば一応動くはず、ですが。。。

    ただ、ユーザーインスタンスをそのまま運用環境で利用するべきかどうかきちんと考慮する必要はあります。

    SQL Severについての知識がないとこのあたりサーバー上で動作させることができません。
    Express EditionでないSQL Serverを利用する場合、MDFファイルをアタッチするとか、あらためて認証用のDBおよびテーブルを作成するとかの作業が必要になります。

    そのような観点からいろいろ調べてみるといいかと思います。


    あおい情報システム株式会社 小野修司(どっとねっとふぁん)

    • 回答の候補に設定 山本春海 2012年4月17日 9:04
    • 回答としてマーク 山本春海 2012年4月27日 6:30
    2012年4月9日 2:50
  • SurferOnWww様

    アドバイスいただき、ありがとうございます。 まず改めて、環境について明記致します。 ※インストールの際に付いてくる細かいソフトについては割愛しております。 

    ■開発環境 ・Microsoft Windows XP Professional Version 2002 Service Pack 3 ・Microsoft Visual Web Developer 2010 express editon ・IIS5.1 

    ■実環境 ・Microsoft Windows Server 2008 R2 Standard ・SQL Server management Studio ・IIS7.0 

    >> DB サーバーは SQL Server でしょうか? 

    認証方式は ASP.NET 標準の Forms 認証でしょうか?

    DBサーバーはSQL Serverを使用しております。 認証はASP.NET標準のForms認証です。 

    ちなみにこれ以外にもDBを使った機能を作っており、 データの登録を行う際には以下のエラーが出てしまっております。 「オペレーティング システム エラー5」 「○○.mdfの自動的に名前が付けられたデータベースをアタッチできませんでした。 

    同じ名前のデータベースが既に存在するか、指定されたファイルを開けないか、 

    UNC共有に配置されています。」

    後者の記述は「CREATE DATABASE 権限がデータベース 'master' で拒否されました。」 

    の後にも存在していたため、同じ問題なのではと考えております。

    >> SQL Server は、開発環境では Express Edition でユーザーインスタンスに 

    接続しているのでしょうか? 実環境ではどうしているのですか?

    SQL Serverについてはよくわかっていないのですが、VWDをインストールする際に 

    オプションとして入れた記憶がありますので、おそらくExpress editionだと思います。

    ユーザーインスタンスの設定についても、申し訳ないのですがよくわかっておりません。

    VWDはWebサーバの代わりとして、自動でポート番号の割り当てなどを行ってくれますが、 

    それに加えてDBへの接続も自動で行ってくれているものだと思っています。 しかし、(開発環境で)VWDを起動していない状態で、Webサーバの部分をIISに任せて 

    アプリを利用した場合でもDBが接続できたので、web.config内に接続文字列の

    設定があれば自動でつながるものと思いました。 

    またSQL Serverに関しては、開発環境ではVWDのインストール時にオプションとして 

    追加し、実環境ではVWDをインストールできないため個別にインストールしましたが、 

    開発環境でも特に設定を行わなかったため、気にせず使えるものと思っていました。 ただ単純に移しただけでは上手くいかないところを見ると、 

    やはりDBとの接続に問題があるのかなと思います。 

    >> ユーザー権限の設定の問題のように見えますが、 

    質問に書いてあるだけの情報では分かりません。

    ユーザー権限の設定というのは、Forms認証特有の問題なのでしょうか。 それとも、SQL Serverの問題でしょうか。  差し支えなければ、アドバイスいただけると幸いです。

    よろしくお願いします。



    • 編集済み joynus 2012年4月9日 4:27
    2012年4月9日 4:22
  • > ■実環境 Microsoft Windows Server 2008 R2 Standard
    > SQL Server management Studio IIS7.0 

    Windows Server 2008R2 なら IIS のバージョンは 7.5 のはずで
    す。


    > SQL Serverについてはよくわかっていないのですが、VWDをイン
    > ストールする際にオプションとして入れた記憶がありますので、
    > おそらくExpress editionだと思います。

    質問者にしか分らないことなのに「おそらく・・・思います」では
    答えようがないです。

    それが分らないと、こちらも想像でレスするしかないし、想像が実
    際と違っていると混乱のもとになるだけですので。

    Express Edition か否か、ユーザーインスタンスを利用した接続に
    なっているか否かは特に重要なことです。開発環境、運用環境両方
    をきちんと調べてください。


    > ユーザーインスタンスの設定についても、申し訳ないのですがよ
    > くわかっておりません。

    Express 版の Visual Web Developer を使って SQL Server への接
    続を設定すると自動的にユーザーインスタンスを利用した接続にな
    るよう接続文字列が自動生成されるはずです。ユーザーインスタン
    スについては以下のページが参考になりませんか。

    ユーザーインスタンス
    http://surferonwww.info/BlogEngine/post/2010/09/14/User-Instance-of-SQL-Server-Express.aspx


    > web.config内に接続文字列の設定があれば自動でつながるもの
    > と思いました。

    開発環境では Express Edition の SQL Server のユーザーインスタ
    ンスに、運用環境では既定のインスタンスに接続する(普通はそう
    するはずです)とすれば、同じ接続文字列では絶対につながりませ
    ん。

    また、既定のインスタンスに接続しようとすると、その前に、アタ
    ッチ、ログインユーザーの作成、ユーザー権限の設定といった操作
    が必要になります。

    DB のアタッチ
    http://surferonwww.info/BlogEngine/post/2010/09/13/ACL-setting-and-database-attaching-in-SQL-Server.aspx

    ユーザー権限の設定
    http://surferonwww.info/BlogEngine/post/2010/09/12/Setting-user-access-right-in-SQL-Server.aspx


    > ユーザー権限の設定というのは、Forms認証特有の問題なのでしょ
    > うか。 それとも、SQL Serverの問題でしょうか。

    少なくともエラーメッセージからは SQL Server の問題であること
    は間違いなさそうです。


    サーバー構築にほとんど経験・知識がないようですが、そうであれ
    ば、Windows Server, SQL Server, IIS の本を買って基礎的な知識
    を得ることをお勧めします。

    また、開発マシンの OS は XP だそうですが、できるだけ IIS の
    バージョンが運用環境と同じ OS(今回の場合、64-bit の Windows
    7 Professional 版以上)を使い、IIS 上で Web アプリを動かして
    開発することをお勧めします。

    • 回答の候補に設定 山本春海 2012年4月17日 9:04
    • 回答としてマーク 山本春海 2012年4月27日 6:30
    2012年4月9日 11:37
  • 小野修司様

    アドバイスありがとうございます。

    おっしゃる通り、ASP.NETの認証機能を利用しています。

    サーバー機のSQL Serverについて調べたところ、やはりExpress Editionでした。

    ただ、残念ながらやはり利用できません。

    開発途中に色々とweb.configをいじってしまっていたので、それが原因かもしれません。

    アプリ自体は簡単なものなので、一から同様の構成で作り直すなどしてみようと思います。

    ユーザーインスタンスについては全く知識が無いため、

    まずはその考え方からしっかり学習してみます。

    2012年4月11日 0:49
  • SurferOnWww様

    記事まで紹介していただき、ありがとうございます。

    IISのバージョンはご指摘の通り7.5でした。

    また、開発環境と運用環境は両方ともExpress Editionですが、ユーザーインスタンスはまだ確認できていません。

    同じような仕組みなので文字列も変える必要が無いと考えていましたが、そこを間違えていたようですね。

    また開発マシンのOSについては、Windows7に今すぐ変えることは難しいので、

    今後似たような開発機会があった場合に意識していこうと思います。

    SQL Serverについては、アタッチは試していたものの、

    ログインユーザーの作成や権限の設定といったところは全くの未着手でした。

    ただSQL Serverの問題だとわかっただけでもありがたいです。

    ここを中心に調べていこうと思います。

    

    ひとまず、教えていただいたページと、サーバー構築に関連する書籍を読んで色々と試してみます。

    それでもわからないことがあればまた質問させていただくこともあるかもしれませんが、

    その際はどうぞよろしくお願いします。

    2012年4月11日 2:05
  • > ユーザーインスタンスはまだ確認できていません。

    接続文字列で User Instance が true(デフォルトは false)に設定
    されているかどうかで確認できます。

    SqlConnection.ConnectionString プロパティ
    http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectionstring%28v=vs.100%29.aspx

    ユーザーインスタンスと規定のインスタンスで、Visual Studio で接
    続文字列を自動生成させると、それぞれ以下のような感じになります。
    (VWD Express は既定のインスタンスには接続できないので注意して
    ください)

    ユーザーインスタンス

    Data Source=.\SQLEXPRESS;
    AttachDbFilename=|DataDirectory|\<mdf ファイル名>;
    Integrated Security=True;
    Connect Timeout=30;
    User Instance=True

    規定のインスタンス

    Data Source=.\SQLEXPRESS;
    Initial Catalog=<データベース名>;
    Integrated Security=True

    • 回答の候補に設定 山本春海 2012年4月17日 9:04
    • 回答としてマーク 山本春海 2012年4月27日 6:30
    2012年4月11日 11:50
  • こんにちは、joynus さん。
     
    MSDN フォーラムのご利用ありがとうございます。オペレーターの山本です。

    しばらく時間が経ちましたが、その後いかがでしょうか。
    みなさんから参考になる情報をいただいていると思われましたので、勝手ながら私のほうで回答としてマークさせていただきました。
    回答くださったみなさん、アドバイスありがとうございます。

    いただいた情報の中で、解決に役立った投稿や、参考になる情報など有効な情報には回答としてマークすることをお願いしています。
    今後、同じ問題でこのスレッドを参照される方にも、有効な情報を活用いただけるかと思いますので、ご協力よろしくお願いいたします。

    今後とも、MSDN フォーラムをよろしくお願いいたします。
    _____________________
    日本マイクロソフト株式会社 フォーラム オペレーター 山本 春海

    2012年4月27日 6:30
  • 山本 春海様

    回答のマークをしていただき、ありがとうございました。

    時間の都合上まだ十分に勉強できていないのですが、

    ここでいただいたアドバイスを元に、勉強してしっかり解決できればと考えています。

    アドバイスをくださった皆様、改めてありがとうございました。

    今後も宜しくお願い致します。

    2012年5月1日 4:19