SQL 2000 Reporting Service安裝於Windows 2000 Domain Controller上,machine.config processModel的身份原本使用SYSTEM,基於安全考量改用IWAM_APName後,不幸的事就發生了。(註: 在Domain Controller上,ASP.NET不能用大家所熟知的ASPNET/NETWORK SERVICE帳號執行,請參考這篇文件的備註)

首先,Reporting Service跑出以下的錯誤訊息:
報表伺服器發生內部錯誤。請查看錯誤記錄以取得更多詳細資料。 (rsInternalError)
這個使用者設定檔是臨時的設定檔。

經驗中,Reporting Service的Log裡有詳細的訊息,追到熟知的C:\Program Files\Microsoft SQL Server\MSSQL\Reporting Services\LogFiles,卻沒看到我期待的詳細錯誤訊息。查了一陣子,才在事件檢視器中看到ReportManager發出的錯誤事件:
在預設的目錄位置中找不到追蹤記錄。追蹤記錄將建立在下列位置 : C:\DOCUME~1\BLAH\IWAM_Y~1\LOCALS~1\Temp\LogFiles

這是因為IWAM帳號沒有權限將檔案寫入該目錄的緣故(要解決的話,請改一下該目錄的NTFS的安全設定),所以只好另覓他處安放。(我覺得這個Log目錄有問題的Exception Handling很棒!!)

查看Log,找到詳細的錯誤訊息:
aspnet_wp!webserver!e2c!05/24/2007-19:40:09:: e ERROR: Internal error: System.Runtime.InteropServices.COMException (0x80090024): 這個使用者設定檔是臨時的設定檔。
at System.Runtime.InteropServices.Marshal.ThrowExceptionForHR(Int32 errorCode, IntPtr errorInfo)
at RSManagedCrypto.RSCrypto.ExportPublicKey()

用Reporting Servcie+0x80090024到Goggle拜一下,得知先前在改用IWAM帳號時,雖然有依http://support.microsoft.com/kb/824308的說明,賦與"用戶端在驗證後模擬"的權限。但IWAM屬於Guests群組,它不被進行一些加密金鑰的相關操作,所以會傳回0x80090024的錯誤訊息。解決的方法是將IWAM_MachineName自Guests群組中移除。移除完得重新開機才會生效,但苦難還沒結束...

Reporting Service改傳回以下訊息:
報表伺服器無法解密用來存取報表伺服器資料庫中機密或已加密資料的 Symmetric 金鑰。您必須還原備份金鑰或刪除所有加密內容,然後重新啟動服務。
The report server cannot decrypt the symmetric key used to access sensitive or encrypted data in a report server database. You must either restore a backup key or delete all encrypted content and then restart the service. Check the documentation for more information.

查了一下,要命!! 換Service Account後,Reporint Service的加密Key就失效了,必須依http://support.microsoft.com/kb/842421 的說明先備份Key,換Account,再設定Key...  只是Account都換了,來得及嗎?  幸好,我們只需先將machine.config先改回SYSTEM,讓Reporting Service再跑起來,就可以完成補票的工作。

手忙腳亂大半天,問題終告解決,Reporting Service又回來了。


Comments

Be the first to post a comment

Post a comment