实现Reporting Service2008 的匿名访问是件比较费劲的事情,网上提供的方法挺多的,但总结起来起来能用的就三种:
一种通过ReportViewer控件显示报表,在系统中添加一个专用用户,权限限制在浏览级别,然后在代码中实现身份接口,指定控件以该用户身份登录,这是变相的匿名访问;(详细见 http://www.cnblogs.com/lonely7345/archive/2010/01/10/1643603.html )
第二种是通过WebService来访问报表,是本人一篇博文( http://www.cnblogs.com/dege301/archive/2009/09/04/1560456.html )中介绍方法的衍生,细节不在说明,类似于第一种方法需要指定专门用户,也不是真正意义上的匿名访问;
第三种就是MSDN上能找到的那种,更改4个配置文件并添加一个.dll文件,经本人测试,如果完全按照给的说明操作不可行,会出现“报表服务器配置错误”,但经过一些列改动之后该方法可行,并且是真正意义上的匿名访问,将在下文中给出详细步骤。
涉及到的配置文件如下(目录视具体安装情况):
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 服务。