[SQL][SSRS]讓 SSRS 可以匿名登入的設定步驟 ( Anonymous Access )
這一陣子手邊剛好有個臨時需求要做一個 Web 查詢的作業,又要能讓使用者將資料匯出到 Excel 內,對我來說 Web 開發實在不是我的專長,因此就覺得拿 SSRS 來使用了。一開始製作報表還算順利,基本上把 SQL 給設定好,欄位寬度設定一下,把要顯示的東西稍微美化一下,一個簡單的查詢表就完成了。原本以為這個是個簡單任務,可以馬上就放假去了,但使用者不想每次都要背帳號和密碼,又不要要換 IE 來瀏覽,想要使用 Chrome 。因此在網路上找了一下相關資料,把這些處理過程給紀錄一下,免得下次又忘記了。
1. 修改 Reporting Viewer 的設定檔 rsreportserver.config ,該檔案預設位在 C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer 的目錄下。
修改前 :
<Authentication> <AuthenticationTypes> <RSWindowsNTLM/> </AuthenticationTypes> <RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel> <RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario> <EnableAuthPersistence>true</EnableAuthPersistence> </Authentication>
修改後 :
<Authentication> <AuthenticationTypes> <Custom/> </AuthenticationTypes> <RSWindowsExtendedProtectionLevel>Off</RSWindowsExtendedProtectionLevel> <RSWindowsExtendedProtectionScenario>Proxy</RSWindowsExtendedProtectionScenario> <EnableAuthPersistence>true</EnableAuthPersistence> </Authentication>
2. 修改 Web 站台設定檔 ( web.config ),一共有兩個,一個是位在 Report Viewer 目錄下 ( 預設在 C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer );一個是位在 Report Manager 的目錄下 ( C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportManager ),因為我只開想開放 Report Viewer,因此我只改一個檔案。
修改前 :
<authentication mode="Windows" />
<identity impersonate="true" />
修改後 :
<authentication mode="None" />
<identity impersonate="false" />
3. 從微軟下載匿名登入的範例專案 ( 下載網址 http://blog.quasarinc.com/wp-content/uploads/2012/03/Microsoft.Samples.ReportingServices.AnonymousSecurity.zip),並且重新編譯出一個新的 Microsoft.Samples.ReportingServices.AnonymousSecurity.dll 檔案,將檔案放置在 C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\bin 的目錄下。正常來說你開啟下載的專案之後,在方案總管會看到類似下面的樣式,因為預設目錄下並沒有 SSRS 的 Interface 檔,因此可以選擇將那個給移除。
接著把 Reporting Services\ReportServer\Bin 下面的 Microsoft.ReportingServices.Interfaces.dll 檔給加入關聯,就可以建置專案產生所需要的檔案了。
4. 將前一個步驟所放置的檔案,將資訊記錄在 Reporting Viewer 的設定檔 rsreportserver.config 內
修改前 :
<Security>
<Extension Name="Windows" Type="Microsoft.ReportingServices.Authorization.WindowsAuthorization, Microsoft.ReportingServices.Authorization"/>
</Security>
<Authentication>
<Extension Name="Windows" Type="Microsoft.ReportingServices.Authentication.WindowsAuthentication, Microsoft.ReportingServices.Authorization"/>
</Authentication>
修改後 :
<Security>
<Extension Name="None" Type="Microsoft.Samples.ReportingServices.AnonymousSecurity.Authorization, Microsoft.Samples.ReportingServices.AnonymousSecurity" />
</Security>
<Authentication>
<Extension Name="None" Type="Microsoft.Samples.ReportingServices.AnonymousSecurity.AuthenticationExtension, Microsoft.Samples.ReportingServices.AnonymousSecurity" />
</Authentication>
5. 在 rssrvpolicy.config 內加入一組設定,設定 RS 信任在步驟四所建立的檔案,並允許在 Report Viewer 站台內使用。
新增 Node :
<CodeGroup
class="UnionCodeGroup"
version="1"
PermissionSetName="FullTrust"
Name="Private_assembly"
Description="This code group grants custom code full trust. ">
<IMembershipCondition
class="UrlMembershipCondition"
version="1"
Url="C:\Program Files\Microsoft SQL Server\MSRS11.MSSQLSERVER\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.AnonymousSecurity.dll"
/>
</CodeGroup>
6. 重新啟動 Reporting Services
接著我用 Chrome 測試,直接連接 Report Viewer,果然不用做 Windows 驗證登入,就可以直接看到我的報表了。但 Report Manager 的部分要是透過 Chrome 連線,還是無法正常顯示,但對我來說那個並不大重要,反正我只開放讓使用者看報表,透過 Report Viewer 就足夠滿足我的需求了。
參考資料
http://blog.quasarinc.com/ssrs/sql-server-reporting-services-2012-anonymous-access/