本文轉自:https://www.cnblogs.com/syfblog/p/4651621.html
近期在研究SSRS部署問題,因為以前也用到過SSRS報表,但當時開發的報表是有專門的集成系統的,不需要我自己去部署,所以對這一塊的部署也不熟悉,我記得當時我是直接開發出一個SSRS 報表,然后會通過自動上傳的方式上傳到微軟Dynamic CRM系統中,它帶有自帶的集成部署。而現如今,看來又得重新回去惡補一下部署的信息了。經過無數的錯誤的再錯誤的嘗試,最終還是過五關斬六將通過了測試了,不容易啊~~。下面我就在部署中遇到的問題統計一下,以供日后大蝦們遇到同樣的問題的時候可以解決。
先來說說環境的問題吧,我使用的是Win8的系統,然后數據庫環境為SQL Service 2008 R2版本的,我們在安裝這個版本的數據庫的時候切記,在選擇數據庫登錄驗證方式的時候,莫要選擇默認的Windows身份驗證的方式,可以選擇混合的身份驗證方式,這個我在后面會提到。接下來說的就是這個數據庫版本的問題了,從SQL 2008版本開始,它跟以前的部署方式就不太一樣了,不需要部署在IIs上,而是要通過匿名方式進行報表的訪問。怎么設置匿名方式訪問呢,問題來了,默認的系統中的文件配置都是Windows的,所以這就要求我們去更改系統中的一些配置文件以修改匿名訪問權限:
首先找到對應的存放要修改文件的位置:(請找到你在安裝的時候設置的默認實例的地址)
1. C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer下的web.config、rsreportserver.config、rssrvpolicy.config
2. C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportManager下的web.config
配置過程:
1. 找到兩個Web.config文件中的如下代碼:
<authentication mode="Windows" />
<identity impersonate="true" />
替換成:
<authentication mode="None" />
<identity impersonate="false"/>
2. 找到rsreportserver.config文件中的如下代碼:
<Authentication>
<AuthenticationTypes>
<RSWindowsNegotiate/>
<RSWindowsNTLM/>
</AuthenticationTypes>
<EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>
替換成:
<Authentication>
<AuthenticationTypes>
<Custom/>
</AuthenticationTypes>
<EnableAuthPersistence>true</EnableAuthPersistence>
</Authentication>
3. 把文件Microsoft.Samples.ReportingServices.AnonymousSecurity.dll放到C:\Program Files\Microsoft SQL Server\MSRS10.MSSQLSERVER\Reporting Services\ReportServer\bin目錄下(注意:目錄視具體安裝情況而定)
4. 找到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中的如下代碼:
</NamedPermissionSets>
<CodeGroup
class="FirstMatchCodeGroup"
version="1"
PermissionSetName="Nothing">
<IMembershipCondition
class="AllMembershipCondition"
version="1"
/>
在后面添上如下代碼(注意Url地址可能不同):
<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\MSRS10.MSSQLSERVER2008\Reporting Services\ReportServer\bin\Microsoft.Samples.ReportingServices.AnonymousSecurity.dll" />
</CodeGroup>
6. 重啟Reporting Service服務。
上面就是對匿名訪問權限的設置了。
接下來就要談一下在報表文件中的一些設置的問題:
我們在建立數據源的時候需要一個憑據,可是在前面我們已經把默認的權限訪問方式設為匿名訪問了,是不能再使用Windows集成訪問的,我也試了不需要憑據的方式,還是會報錯,那就只能選擇使用用戶名和密碼的方式訪問了,這就是為什么在前面我提到的,在安裝數據庫的時候最好使用混合模式了,我們在這需要用到安裝的時候設置好的訪問數據庫的用戶名和密碼來進行數據庫的訪問
否則的話會報錯,
接下來就是報表系統屬性的設置了,我就不一一列舉了,直接發個圖吧:
注意一下各屬性的值的設置,估計問題也不大。
在做完報表之后,我們就應該把它部署發布到對應的報表服務器上去,也就是到了配置報表的時候了,先上圖:
默認的服務賬戶的一半是內置賬戶,我選的是LocalSystem,這個問題不大,對應的Web 服務URL的設置就是報表文件中的TargetURL,請確保一致的,在這里我們可以采用系統自己默認的,不需要做啥更改,當然你也可以自己坐一下修改,比如改改端口啥的,接下來就是報表管理器的URL的設置,跟Web服務URL差不多,可以采用默認的。這里要注意到的是,由於我們之前采用的是匿名訪問的方式,所以需要指定一個執行賬戶,這個千萬不能落了,不然會出問題的,在制定執行賬戶中,必須是你的系統數據庫有對應的賬戶的,不能憑空弄一個名字,這就要求你在數據庫安全性中設置對應的賬戶名,並給其配置一定的角色權限。
做到這里,整個流程就差不多了,我們就可以查看報表結果了:
嗚呼,整個流程就這樣走通了~~中途中可能出現什么程序集未能找到的問題,歸根結底還是用戶和權限未設置好的問題,所以不要老想着去下載什么程序集弄進去,先把賬戶和權限設置好了才是正道~~~