KB-再探Windows Update後SSRS不能列印問題
【2008-10-30更新】依本文做法仍無法更新RSClientPrint.cab的朋友,請參考我的第三帖藥方。
自從貼出安裝KB956391後SSRS不能列印問題後,陸續又接獲同事及網友的回報,才慢慢釐清這個事件的始未...
SSRS不能網頁列印的原因源於RSClient Print這顆元件被ActiveX KillBit封殺,而封殺的理由是基於安全考量,RSClientPrint Class存在一個GDI+漏洞,讓駭客可以透過惡意的BMP發動溢位攻擊。換句話說,KB956391為了修復GDI+弱點,就透過Kill Bit判了舊版RSClientPrint元件的死刑,安裝後SSRS不能列印是By Design,而不是Bug!
了解前因後果後,下一步就是解決問題。
微軟提供的解法是裝SQL 2005 SP2 GDR(有人稱GDR2)。我安裝GDR2後,ReportServer顯示9.00.3152,但C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\RSClientPrint.cab仍是2007/02/10的舊版,想當然爾,其中是{FA91DF8D-53AB-455D-AB20-F2F023E498D3}這顆被封殺的舊元件,問題仍未解決。
不過看到不少人分享,幾乎可以確認安裝GDR2會更新RSClientPrint.cab,換版後問題就排除,我假設我的GDR2安裝並未成功,因此未成功置換RSClientPrint。於是,我決定反安裝GDR2再重新安裝,接著就看到C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\RSClientPrint.cab變成美妙的2008/8/5的版本,Browser連上時會提示安裝新版元件,很自然地,列印功能就OK了。
以下對這個問題做個總結:
- Client安裝KB956391後就無法用SSRS的網頁報表列印是正常現象,理由是SSRS的舊版RSClientPrint元件有安全漏洞,不建議大家繼續使用。
- 由於舊版元件不安全,我們便需要更新SSRS Server,使其改用新版RSClientPrint。
最簡單的更新方法是安裝GDR2:(要先裝SQL 2005 SP2)
SQL 2005 SP2 GDR(General Distribution Release) KB933097
http://support.microsoft.com/kb/933097/
有一些GDR2安裝的注意事項,也一併列出作為參考:
(請注意版號,可由http:// yourweb /ReportServer頁面上取得)
http://www.microsoft.com/taiwan/sql/sp2_gdr_install.mspx
http://blogs.msdn.com/psssql/archive/2007/04/06/post-sql-server-2005-service-pack-2-sp2-fixes-explained.aspx
- 安裝後確定C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\RSClientPrint.cab的檔案日期是2008/8/5,表示更新完成。此時Client再連上SSRS會提示安裝元件,安裝完成應該就可以列印。
- 如果一時無法裝好GDR2,又急著列印怎麼辦?
事實上,只需先將HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{FA91DF8D-53AB-455D-AB20-F2F023E498D3}\Compatibility Flags刪除即可。如果嫌用RegEdit改太麻煩,可以將以下內容存成FixRSClientPrint.reg,點兩下執行亦可解除封殺救急。待更新SSRS後,請務必將其還原回"Compatibility Flags"=dword:00000400(或重新安裝一次KB956391)。
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\ActiveX Compatibility\{FA91DF8D-53AB-455D-AB20-F2F023E498D3}] "Compatibility Flags"=- |
** 但還是要提醒大家,這個元件已被證實有漏洞,強制開放使用可以救急,但也意味著要承擔風險,儘速更新SSRS才是上策!!
- SQL 2000 Reporting Service也可能有類似問題,有人回報裝了以下Hotfix即可解決。
SQL 2000 Reporting Service SP2 Hotfix KB954609
http://www.microsoft.com/downloads/details.aspx?displaylang=zh-tw&FamilyID=5f9e7f78-7439-414b-a9dc-a779b89427db