Webアプリケーションで作成されたSQL Serverデータベースを表示できないのはなぜですか?


5

私は、ASP.NET MVC WebアプリケーションをWindows Server 2012マシン上のIISにデプロイしました。アプリケーションが最初に起動すると、必要に応じてEntity Frameworkによって必要なデータベースとテーブルが作成されます。これで問題なく動作し、SQL Server Management Studioを使用してデータベースにいくつかの管理作業を行いたいと思います。しかし、私がそのツールを開くと、システムデータベースだけが表示されます。接続文字列から "User Instance = true"を削除し、アプリケーションでデータベースを再度作成させる場合は、データベースを参照できます。

User Instance = trueが接続文字列に含まれていたときに、Webアプリケーションによって作成されたデータベースを表示できないのはなぜですか?すべての役割を持つアカウントでManagement Studioを使用してサーバーインスタンスを表示している場合は、すべてのデータベースを参照できます。

役立つかもしれないいくつかの詳細

アプリケーションは、Web.configファイルに次の接続文字列使用しています:IISで

<add name="DefaultConnection" connectionString="Data Source=.\SqlExpress; 
    Initial Catalog=Foo.Dashboard; Integrated Security=SSPI;User Instance=true" 
    providerName="System.Data.SqlClient" /> 

を、アプリケーションプールは、アイデンティティLocalServiceLoad User Profileで実行するように設定されています設定はTrueです。 SQL Server Expressでは、Local Serviceアカウントのログイン情報を追加し、dbcreatorロールを付与しました。アプリケーションが起動すると、データベースとテーブルを作成することができ、すべてが機能しているように見えました。

次に、リモートデスクトップでサーバーに接続し、SQL Server Management Studioを開きます。データベースに接続するには、サーバ名に.\SQLEXPRESSと入力し、Windows Authenticationで認証します。私は次に接続し、は、システムデータベースを参照してください。すべての可能なデータベースの役割をログインに追加しました。有効なタブにVIEW ANY DATABASE権限があります。

8

user instance=true設定の使用を中止してください。 has this feature been deprecatedだけでなく、実際にここで起こっていることは、アプリケーションが使用しているものよりも異なるユーザーインスタンスのSQL Serverを起動していることです。そのため、両方で同じことを見ることはできませんケース。

(通常、誰かが自分のアプリからアップデートを実行してから、Management Studioのテーブルをチェックしてバグがあると考えていますが、アップデートがデータベースの別のコピーに影響を与えていることを認識していません)。

実行中のSQL Serverインスタンスにデータベースを作成(またはそこにアタッチ)します。次に、User Instanceの設定をせずに、と同じの方法で、そのサーバーにSSMSとアプリケーションの両方から接続します。 Lots more information here。アプリケーションを起動するたびにデータベースを作成しないでください。ちょうど恐ろしいほど間違っているようです。

+1

ありがとうございました。私はUser Instance = trueの使用をやめ、それが何をしているのかをよりよく理解するのを手伝ってくれました。データベースは、アプリケーションが起動するたびに作成されるのではなく、アプリケーションの起動時にのみ発生し、データベースが存在しない(通常は初めて起動するときのみ)ことがわかります。 13 12月. 132013-12-13 17:19:49


-1

サーバーにログオンしている場合は、サービスウィンドウにいくつのSQLサービスがあるかを確認できます。 複数のインスタンスが存在する可能性があります。