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了。

以下對這個問題做個總結:

  1. Client安裝KB956391後就無法用SSRS的網頁報表列印是正常現象,理由是SSRS的舊版RSClientPrint元件有安全漏洞,不建議大家繼續使用。
  2. 由於舊版元件不安全,我們便需要更新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
  3. 安裝後確定C:\Program Files\Microsoft SQL Server\MSSQL.2\Reporting Services\ReportServer\bin\RSClientPrint.cab的檔案日期是2008/8/5,表示更新完成。此時Client再連上SSRS會提示安裝元件,安裝完成應該就可以列印。
  4. 如果一時無法裝好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才是上策!!
  5. 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
歡迎推文分享:
Published 24 October 2008 07:54 PM 由 Jeffrey
Views: 18,113



意見

# haisheng lin said on 27 October, 2008 10:02 PM

服务器环境:win2k3 sp2 en+sql 2005 sp2 ch

我公司百多个客户端也被这个问题困扰了几周,找到你到帖子时很高兴,以为可以解决了,谁知道安装补丁是发现只有英文版补丁,我们的是sql 2005 中文版,不知道是否存在问题,不管了,装吧,安装完KB933097 RSCLIENTPRINT.CAB并无更新,重装也一样,再安装最新的补丁SQLServer2005-KB953752-x64-ENU.exe,RSCLIENTPRINT.CAB是更新了,但客户端连安装插件的提示都没有了,删除注册表ID的方法也无效。

非常感谢您的文章,有空的话请抽点时间回复,谢谢。

# Tzu said on 28 October, 2008 04:17 AM

謝謝大大的分享!!

今天在公司剛好遇到這問題...看到你的文暫時解決幾台有問題的電腦...

可是如大大所說的安裝GDR2,也是和上面那位一樣..

檔案一樣是舊的...沒有更新呢...

這是什麼原因呢???

# Jeffrey said on 28 October, 2008 10:12 AM

to haisheng, 更新的重點除了RSClientPrint.cab要更新,SSRS網頁中引用的元件CLSID必須也是新的。依您的情況,我會設法用Fiddler2之類的軟體觀察一下列印網頁中的CLSID是否已更新為41861299-EAB2-4DCC-986C-802AE12AC499? CodeBase是否有正確指向RSClientPrint.cab?

to Tzu, 我第一次裝完GDR2,RSClientPrint.cab也是沒更新成功,後來又移除GDR2,停止所有SQL服務再裝了第二次才成功,建議移除再重裝試試。

# Lisa said on 28 October, 2008 08:49 PM

嗯嗯...我試過2次了...還是沒更新過去...

# Aesop said on 29 October, 2008 08:42 PM

感謝Jeffrey

小弟第一次也沒更新過去Services是開啟的

將Services停掉之後才更新就OK了(更新後要重開機喔)

沒重開機好像沒用

RSClientPrint.cab就更新為2008/8/5版本

# Aesop said on 29 October, 2008 08:45 PM

小弟更新過去了感謝Jeffrey的提點

第一次也是沒將服務停掉更新失敗

第二次停了服務重開機之後,就可以使用了

# Scott said on 29 October, 2008 11:45 PM

這邊sql server 2005之前做過update,下載此套件會出現無法安裝請下載3282版本,去microsoft搜尋再次下載安裝即可, 附上微軟網址。

support.microsoft.com/.../zh-tw

# Jeffrey said on 30 October, 2008 06:24 AM

今天遇到一台機器使用GDR2一直無法更新,因此我找到另一條路線: blog.darkthread.net/.../rsclientprint-issue-again.aspx

各位朋友如果仍無法更新成功,可以參考看看。

# Henry said on 19 March, 2010 04:12 AM

我的SQL 2000 Reporting Service確實也有問題,Client端預覽報表時按印表機的icon,左下角會出現三角形的警告,安裝了Hotfix後已經解決。

SQL 2000 Reporting Service SP2 Hotfix KB954609

安裝時不可以停用SQL Server,否則會更新失敗,更新後也不用重新開機,Client端預覽報表時按印表機的icon已經會出現列印視窗並可將報表印出,更新後的RSClientPrint.cab為2008/8/4,感謝感謝^^

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<October 2008>
SunMonTueWedThuFriSat
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication