2012年3月30日 星期五

Q & A : LocalDB IIS 權限問題

開發工具 : Visual Studio 11 Beta
作業系統 : Windows 7 Ultimate
IIS 7.5

因為blog有留言詢問有Local DB的網站,放在IIS上確無法執行的問題。米米想應該是權限問題吧,不過因為我用來測試的電腦上,居然沒有裝IIS (怎麼會有這種事??),所以沒有做測試,就請匿名的網友試試NTFS授權。
沒想到,回應是授權了也不work!!
這倒是一個有趣的問題,因此一早就把測試機器上的IIS 裝起來。
  • 使用Visual Studio 11 Beta 建一個Web Site在IIS
image
  • 加入LocalDB資料庫到網站
image
  • 新增Web Form
image
  • 將Table拉到網頁設計畫面
image
  • 一執行,果然出現了問題
image
  • 錯誤訊息如下,最後一行寫說”請看一下Event Log吧…”

A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 50 - Local Database Runtime error occurred. Cannot create an automatic instance. See the Windows Application event log for error details.
)

  • 打開Event Viewer看一看,有兩個明確的錯誤訊息。一個說Profile沒有load
image

  • 一個是拒絕存取
image
  • 針對第一個問題,Profile沒有load。開啟C:\Windows\System32\inetsrv\config目錄下的applicationHost.config檔案,找一下ProcessModel的設定,將以下兩項都設為true。
image
  • 針對第2個問題,權限的地方。檢查一下IIS目前的設定,TestWebSite網站建立在DefaultAppPool下。因為DefaultAppPool在IIS 7.5 使用的是ApplicationPoolIdentity來執行程式
image
  • 利用檔案總管,找到資料庫的Database1_log.ldf檔,授權ApplicationPoolIdentity帳號有Full Control 權限
image
image
  • 選不到帳號,要自己輸入字串:
image
  • 設Full Control
image

  • 按相同步驟,利用檔案總管,找到資料庫的Database1_log.mdf檔,授權ApplicationPoolIdentity帳號有Full Control 權限

  • 測試前,先IISRESET,讓組態確定套用。
image
  • 再執行網頁,問題就解決了。
image

5 則留言:

匿名 提到...

非常的感謝您,總算是找到原因了: setProfileEnvironment="true"

我的 DefaultAppPool 原本 Identity 就是設定成用 NetworkService, 但在 IIS 裡 Application Pools 的進階設定中只能設定 loadUserProfile, 難怪一直找不出原因。

再請教您是如何從 event logs 找到要去修改 applicationHost.config 的線索?我當下的反應也只是到 IIS 去把 loadUserProfile 設定成 true 而已...

米米貓學開發 提到...

我應該是走狗屎運,因為以前寫過一篇文章,把程式deploy到IIS 7,當時記得我是將App Pool 執行身份改掉,後來想改成IUser,結果IIS工具的選單沒得選,後來才找到從applicationHost.config 檔案去修改網站設定。然後,我就忘記,組態設定可以從IIS管理工具設這回事。所以這次一看到錯誤訊息,就使用Profile字眼直接搜尋applicationHost.config 檔案,看到LoadUserProfile預設是 true,就想說,那把setProfileEnvironment設為"true"看看。

Michael Tsai 提到...

在網路上爬文找 SQL Server 連線問題,結果爬到這篇。學習了 ^^

Gelis 技術隨筆-部落格 提到...

原來跟 IIS 的 ApplicationHost 的 setProfileEnvironment 有關!學習了!感謝 ^^

匿名 提到...

我的問題也是setProfileEnvironment="true",真的非常感謝作者幫我解決了困擾我好幾天的困難!!!!

總網頁瀏覽量