IIS7 應用程式使用錯誤的 SQL Server 2008 Express 資料庫

IIS7 應用程式使用錯誤的 SQL Server 2008 Express 資料庫

我很困惑。我在虛擬專用伺服器上有一個客戶端網站 - Windows Web Server 2008 SP2、IIS7、SQL Server 2008 Express。

我正在嘗試設定第二個網路應用程序,以便他在更新上線之前查看更新。我已經在 IIS7 中建立了 Web 應用程序,並向 SQL Server 新增了第二個資料庫。第二個資料庫本質上是生產資料庫的副本,資料庫名稱前面帶有“DEV”前綴,並且在一些表中包含一些新欄位。

我的生產站點運作良好。但是,測試站點會傳回 SqlException:“無效的列名‘版本’。”這是新欄位之一 - 這讓我相信我的開發網站指的是生產資料庫,而不是開發資料庫。然而,連接字串確實指向不同的資料庫(儘管兩者的登入名稱相同):

  • 生產網站:“伺服器=.\SQLExpress;資料庫=myDbName;使用者ID=myUserName;密碼=myUserPassword;”
  • 開發網站:“伺服器=.\SQLExpress;資料庫=DEVmyDbName;使用者ID=myUserName;密碼=myUserPassword;”

看來這應該是我所缺少的明顯的東西。一位同事建議我為第二個 IIS 應用程式建立另一個應用程式池,但這似乎沒有幫助。

更新,經過進一步測試:

我將開發網站的連接字串變更為

"Server=.\SQLExpress;Database=DEVmyDbName;User ID=devuser;Password=myNewDifferentPassword;"

並在資料庫上建立新的 SQL Server 登入名,並只授予其存取 dev 資料庫的權限。我還將 dev 資料庫設定為帳戶的預設資料庫。我從生產登入中刪除了對開發資料庫的存取權限。當我嘗試登入網站時,出現以下錯誤:

  • 伺服器主體“devuser”無法在目前安全性上下文下存取資料庫“myDbName”。

因此,有兩件事我可以確定:

  1. 由於它使用新的用戶名進行登錄,我知道該應用程式正在使用我提供給它的連接字串;
  2. 由於某種原因,一旦登錄,它似乎會忽略指定的資料庫並嘗試使用生產資料庫。

仍然難倒了。

答案1

經過進一步挖掘,我找到了罪魁禍首——這是一個應用程式問題,與 NHibernate 的配置有關。設定的 NHibernate 設定選項之一是「default_schema」 - 當我刪除它時,應用程式開始連接到正確的資料庫。

看來 default_schema 屬性覆蓋了連接字串中指定的任何資料庫。

答案2

聽起來你有多個連接字串;是否有可能在應用程式的某個地方儲存了一個?

僅在開發系統上建立新的使用者名稱/密碼,更改您的開發連接字串以使用它,如果它連接,則問題出在其他地方。

如果您有權限存取完整版本的 SQL,則可以針對 SQLExpress 執行個體執行 Profiler 並監視活動。

相關內容