[SQL][SSRS]讓 SSRS 可以匿名登入的設定步驟 ( Anonymous Access )

[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 檔,因此可以選擇將那個給移除。

image

接著把 Reporting Services\ReportServer\Bin 下面的 Microsoft.ReportingServices.Interfaces.dll 檔給加入關聯,就可以建置專案產生所需要的檔案了。

image

 

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

image

 

接著我用 Chrome 測試,直接連接 Report Viewer,果然不用做 Windows 驗證登入,就可以直接看到我的報表了。但 Report Manager 的部分要是透過 Chrome 連線,還是無法正常顯示,但對我來說那個並不大重要,反正我只開放讓使用者看報表,透過 Report Viewer 就足夠滿足我的需求了。

image

 

參考資料

http://blog.quasarinc.com/ssrs/sql-server-reporting-services-2012-anonymous-access/