Sql-Server

為什麼我無法查看 Web 應用程序創建的 SQL Server 數據庫?

  • January 14, 2016

我有一個 ASP.NET MVC Web 應用程序部署到 Windows Server 2012 機器上的 IIS。當應用程序第一次啟動時,它會在必要時通過實體框架創建它需要的數據庫和表。這一切都很好,現在我想通過 SQL Server Management Studio 對數據庫進行一些管理。但是,當我打開該工具時,我只看到系統數據庫。如果我從連接字元串中刪除“User Instance=true”並讓應用程序再次創建數據庫,我可以看到數據庫。

當連接字元串中有 User Instance=true 時,為什麼我無法查看 Web 應用程序創建的數據庫? 如果我通過 Management Studio 使用具有所有角色的帳戶查看伺服器實例,我希望它能夠查看任何和所有數據庫。

一些可能有幫助的細節:

應用程序在 Web.config 中使用以下連接字元串:

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

在 IIS 中,應用程序池設置為使用標識執行,LocalService設置Load User ProfileTrue. 在 SQL Server Express 上,我們為該Local Service帳戶添加了一個登錄名並為其賦予了dbcreator角色。當應用程序啟動時,它就能夠創建數據庫和表,並且一切似乎都在執行。

然後我使用遠端桌面連接到伺服器並打開 SQL Server Management Studio。要連接到數據庫,我輸入.\SQLEXPRESS伺服器名稱並使用Windows Authentication. 然後我連接並只看到系統數據庫。我已將所有可能的數據庫角色添加到我的登錄名中,並且我看到我VIEW ANY DATABASE在有效選項卡中擁有權限。

請停止使用該user instance=true設置。不僅此功能已被棄用,而且此處實際發生的情況是 Management Studio 正在啟動與您的應用程序正在使用的 SQL Server不同的使用者實例,因此您看不到相同的東西也就不足為奇了在這兩種情況下。

(通常,這種情況的症狀是有人從他們的應用程序執行更新,然後在 Management Studio 中檢查表,認為存在錯誤但沒有意識到更新影響了數據庫的不同副本。)

在正在執行的 SQL Server 實例上創建數據庫(或將其附加到那裡)。然後從 SSMS 和您的應用程序以相同的方式連接到該伺服器,無需設置。更多資訊在這裡。不要在每次應用程序啟動時都創建數據庫——這聽起來非常錯誤。User Instance

引用自:https://dba.stackexchange.com/questions/54958