Pages

2012-10-18

SQLExpress的Login Failure

SQLExpress雖然是免費DB,但存在一些限制,其中最討厭就是同時執行程式存取及SQL Management Studio (SMS),一方打開了,另一方就喊程序被使用無法開啟,常常得重新啟動SQLExpress服務及解除MDF檔的Lock才行(Unlocker工具)。既然免費,這點極不方便的麻煩就忍了,我後來自己寫了一套SQL執行管理工具取代了SMS以應急。

若使用SQLExpress當作是Website的資料庫,極可能你會遇到「Login Failure for “NT Authority\System”」的錯誤,網上文章會教你要SMS的Login裏要新增這帳號,但明明它就已存在呀! 其實要通過DB權限登入檢查,有下次2個地方要注意:

1. DB Security:
下圖是SMS安全/登入裏的角色,預設「NT Authority\System」帳戶就會存在,但每個DB裏也有Login的帳戶,當你複製過來時即使有同名的帳號,其實該Login User已中斷了權限,必須刪除再重建才行。
DB Security
2. File Security:
畢竟SQLExpress會讀寫MDF檔,所以該帳號也要有對FileSystem的讀寫權限,不過通常「 System」帳號都有讀寫權了。
File Security

通常以上兩種試了此錯誤還是會存在,才會有此文章的產生。通常SQLExpress的連線字串是使用:
AttachDbFilename=|DataDirectory|\xxx.mdf;User Instance=True

由於IIS執行網頁已咬住該MDF檔,所以你在SMS無法attach打開它,往往會誤以為新增SQL服務Login就好,它就會連動至所有的SQLExpress DB,這是錯誤的觀念,因為它的「Login連動效果」只侷限SMS內有Attached上的所有DB而己。

所以請用Unlocker工具把MDF檔解除鎖定,再用SMS將它Attach上,並在其DB Login內確認具備該System帳號 (複製而來的通常不存在),再Detach卸載該DB(因為無法同時使用)並執行即可。

No comments: