SQL Server Reporting Services (SSRS) 是一個功能強大的報表平台,廣泛應用於各類報表需求。然而,當非 .NET 技術棧(如 JSP、PHP)需要整合 SSRS 報表時,常面臨一個棘手問題:如何讓程式直接訪問報表而不彈出身份驗證對話框。自 SSRS 2008 起,原生匿名訪問配置變得複雜,社區已有相關討論(參見 Dege301 的文章)。本文提出一種間接方案:在應用與 SSRS 之間插入一個 ASP.NET 程式,利用 ReportViewer 控件渲染報表,並透過 IIS 模擬具備 SSRS 訪問權限的使用者身份,從而實現無縫匿名訪問。
傳統跨平台調用 SSRS 時,若直接訪問報表伺服器 URL,會觸發 Windows 身份驗證。解決路徑是建立一個中介層:
ReportViewer 控件,指向 SSRS 報表路徑。
為了演示,先在 SQL Server Data Tools (SSDT) 中建立一個報表伺服器專案,佈署幾份簡單報表(如銷售明細、庫存統計)。確保報表已發布至報表伺服器,並記下報表路徑(例如 /Reports/SalesDetail)。
Microsoft.Reporting.WebForms.ReportViewer 控件至 Default.aspx。ReportViewer 屬性:ProcessingMode = RemoteServerReport.ReportServerUrl = "https:///ReportServer" ServerReport.ReportPath = "/Reports/SalesDetail"Page_Load 中處理傳入參數(如日期區間、客戶代碼),動態設定 ReportParameter 集合並呼叫 ReportViewer.ServerReport.Refresh()。SSRS_Proxy_Pool)。Browser 角色的網域使用者(或本地帳號若同機)。web.config 設定 <identity impersonate="true" userName="domain\user" password="pwd" />(注意加密儲存密碼)。| 優點 | 缺點/風險 |
|---|---|
| 完全繞過前端身份驗證彈窗 | 增加一層中介,維護成本上升 |
| 可統一處理參數驗證、日誌、權限控制 | ReportViewer 相依特定 SSRS 版本,升級需測試 |
| 支援多種輸出格式(HTML/PDF/Excel) | 高併發下 ReportViewer 效能較差,建議快取或改用 SSRS Web Service 直接渲染 |
補充提示:若環境允許,SSRS 2016+ 可直接設定 RSWindowsExtendedProtectionLevel=Off 並配合自訂驗證擴充套件,但跨平台場景下「中介層」仍是最通用、改動最小的方案。