為什麼我無法查看 Web 應用程序創建的 SQL Server 數據庫?
我有一個 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 Profile
為True
. 在 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