2009-11-30 61 views
2

我使用Forms身份驗證將我的ASP站點的服務器的ASPNETDB.MDF文件從我的本地計算機上拉下來。我使用ASP.NET網站配置工具向數據庫文件添加了新用戶。我上傳的MDF文件傳回服務器,現在我得到下面的異常,每當我試圖登錄的任何用戶:這裏無法打開用戶默認數據庫

Cannot open user default database. Login failed.
Login failed for user 'NT AUTHORITY\NETWORK SERVICE'

我一直在谷歌上搜索並閱讀所有其他的解決方案,這個問題在SO上也沒有發現任何有用的東西。

服務器上有SQL Server 2008,這就是我在本地計算機上使用VS 2008 Professional的原因。

我的連接字符串(換行增加了可讀性):

<add name="ASPNETDBConnectionString1" 
    connectionString="Data Source=.\SQLEXPRESS; 
         AttachDbFilename=|DataDirectory|\ASPNETDB.MDF; 
         Integrated Security=True;User Instance=True" 
    providerName="System.Data.SqlClient" 
/> 

我是新來的SQL Server,所以我敢肯定,我亂七八糟的東西了地方。

任何幫助是極大的讚賞。

回答

2

關於誰或什麼,或者爲什麼關於配置以外的所有問題......

您的問題可以從連接字符串中推斷出來。這將在本地針對sql express工作,但不會針對服務器上的sql。

第一個線索是隻有SqlExpress啓用用戶實例。在Sql上,你將不得不附加mdf。

如果連接字符串在你的機器上,而在VS 2008中,你已經安裝了SQL Express。如果該連接字符串在服務器上運行,則服務器安裝了SQL EXPRESS。

如果服務器沒有安裝和配置爲允許用戶實例,因爲我希望它沒有,那連接字符串將導致您遇到登錄失敗的異常的SQL Express。

我也想知道你的副本是從哪裏來的。通常訪問將被拒絕活動的mdf,即使是複製。

請確認的Sql版本的客戶端和服務器端,並試圖找到這兩個web.config文件中的一個以前的副本來比較連接字符串。

+0

這些都是很好的解決方案,但我發現檢查我已經安裝的版本與服務器上的版本相比有一些不一致之處。看來,我的機器上有一個以前的安裝殘留,導致了一些問題。 – Casey 2010-02-10 13:08:53

+0

很高興它解決了。是一個相當典型的情況,但並不總是很明顯。 – 2010-02-10 18:18:22

0

您對問題的描述不完整或與錯誤不一致。您需要提供更多信息以獲得更好的答案,但這裏是我的初步答案。

該錯誤表明您的應用程序正在使用集成身份驗證到SQL。所以,這將有助於查看連接字符串。它可能在某處說'SSPI'。這意味着應用程序容器作爲(NETWORK SERVICE)運行的用戶正嘗試連接到數據庫,並且它不能,因爲它沒有權限這樣做。

所以你要麼改變連接字符串作爲你所做的一部分,或NETWORK SERVICE以前是數據庫用戶(我認爲不是一個好主意)。

您的web.config中可能還有其他與安全相關的設置。您的應用似乎使用表單身份驗證。如果IIS設置爲允許匿名訪問,並且您的web.config設置爲模擬,那麼也可能導致NETWORK SERVICE嘗試連接到SQL。

應用程序應該如何連接?您是否有服務帳戶(單個用戶帳戶),所有通過表單身份驗證進行身份驗證的用戶都應該通過數據庫操作?如果是這樣,那麼您需要更改數據庫連接字符串以包含用戶和密碼。

爲了解決這個問題,您需要檢查您的連接字符串,web.config中的任何與表單驗證相關的設置以及IIS中的安全設置。我認爲這與所添加用戶的事實無關。

編輯: 所以你正在使用集成安全,就像我懷疑。這不適用於Forms Auth,因爲當用戶使用其用戶標識對您的應用程序進行身份驗證時,您的應用程序將通過集成身份驗證(即NETWORK SERVICE)對數據庫進行身份驗證。您需要一個數據庫服務帳戶,imo,並且我不知道如果您沒有更改連接字符串,它可以如何工作。

+0

我根本沒有修改web.config。剛剛複製了MDF文件。我假設我搞砸了一些屬性或副本中的某些東西。 在我將修改的MDF複製過來之前,這是工作的,並且希望暫時繼續使用當前的web.config文件。 – Casey 2009-11-30 04:09:51

+0

標記是正確的,即數據庫用戶在實例之間不可移植,並且在服務器之間移動的數據庫需要將登錄重新映射到該數據庫。您可以隨時嘗試這樣做,但不允許NETWORK SERVICE連接到您的數據庫。您使用純數據庫驅動的表單身份驗證,沒有任何Active Directory集成,更正?我必須承認,我從來沒有使用SQLEXPRESS,但我認爲安全性與SQL Server不同。 – cdonner 2009-11-30 04:20:48

+0

順便說一句,創建Web表單可以讓你添加和編輯Forms Authentication用戶帳號,這非常容易。來回移動數據庫可能不是管理用戶的最佳方式。 – cdonner 2009-11-30 04:21:41

1

我認爲你的問題是,你不守數據庫登錄和數據庫用戶之間軌道的差別。登錄可以訪問SQL Server(一般情況下)。數據庫用戶是已被授予訪問特定數據庫的登錄名。當您像往復一樣複製文件時,可以使登錄帳戶(尤其是Windows帳戶)的基礎標識符無效。

我會建議你使用SQL帳戶登錄到您的SQL服務器(而不是Windows帳戶),並放置在web.config文件中的憑據。我簡單地發現,這比配置Windows帳戶登錄更容易配置,使用和更改。登錄設置完成後,請確保它也具有用戶訪問您希望使用的服務器上的數據庫的權限。你可能仍然遇到轉移問題(雖然他們不太可能),但修復它們更容易。

重要提示:別人不同意 - 他們認爲Windows帳戶更安全 - 所以你可能要教育自己對這個問題!

+0

他正在討論添加Forms身份驗證用戶。這些僅僅是.Net爲此創建的表中的數據庫行。 – cdonner 2009-11-30 04:10:21

0

可以嘗試更改此 應用Pools->高級設置 - >流程模型 - >身份 ?

我得到了相同的錯誤,並通過更改過程模型進行修復。