SQL Server Reporting Services 远程匿名访问解决办法

SQL Server Reporting Services 并非专门设计用于 Internet 报表部署方案,但是您可以成功地将 Reporting Services 放置于面向 Internet Web 服务器上,
   以将一般信息向广大公众传播,或者将公司保密数据向经过授权和身份验证用户传播。
  
          公司的一个项目中的报表准备升级到SQL Server 2005,并且其中的报表系统将使用集成在SQL Server 2005中的Reporting Services
   但是当我将报表模板发布到IIS服务器后,通过IE客户端通过浏览器访问时,默认会弹出Windows集成身份验证的对话框。
   如果在IIS配置里面把允许匿名(IUSR_**)访问的选项勾选,IE客户端再次访问的时候,会提示以下信息:
    1)为用户“NT AUTHORITY/NETWORK SERVICE”授予的权限不足,无法执行此操作。 (rsAccessDenied)
    2)    请求因HTTP 状态401 失败:Unauthorized(IUSR_** 访问权限不足。)

对于这个问题,我在参考了msdn与网上的一篇文章(http://www.cnblogs.com/firmwolf/archive/2005/08/04/207062.html),之后解决了些问题。
    解决方案:
    除了要设置IIS允许匿名访问外,还需要设置Reporting Services站点的访问权限和SQL Server中数据源的用户访问权限。

下面我将把需要做的步骤列出来,大家注意前提是使用Visual Studio .NET 2005 已经正确的发布了Reporting Services制作的报表模板到IIS服务器。

第一步:在运行IISWeb服务器的本地访问http://localhost/reports ,这是Reporting Services的管理站点,在Properties属性页面下添加一个只有Browser(浏览者)
     权限的新Role(角色)。注意新角色的用户名称即IUSR_** (匿名用户)。这一步就是那篇文章中步骤。(如图)
   1  点击新建角色分配
   2  弹出的IE窗口中,组或用户名文本框输入IUSR_** (匿名用户)。
   3  勾选浏览者权限,点OK按钮确定。
   4  返回到http://localhost/reports 页面中会新出现添加的Role(角色)。
   


第二步:除了要设置Reporting ServicesIIS站点能允许IUSR_**(匿名用户)访问外,首先需要设置SQL Server 2005 中相应的数据库能允许IUSR_**(匿名用户)有只读的访问权限和执行存储过程的权限。因为有些报表可能是由存储过程生成的。

      在运行SQL Servier 2005 的数据库服务器中,打开Microsoft SQL Server Management Studio
      Object Explorer(对象浏览器)中找到Security(安全性)目录下的Logins(登录名)目录上点右键,
      Logins(新建登录名...),在弹出的对话框中设置。
      或是在安全性上点右键-->新建-->登录。(如图)
    1  右键菜单选择新建登录名...”
    2  在登录名文本框中,输入IUSR_**(匿名用户),选择 “Windows 身份验证
    3  默认数据库下拉列表框找到Reporting Services制作的报表模板的数据源数据库。
    4  选择页列表中点击用户映射
    5  用户映射页面中,在映射到此登录名的用户选择Reporting Services制作的报表模板的数据源数据库。
    6  OK确定
   



第三步:还是在Microsoft SQL Server Management Studio中,找到Reporting Services的数据源数据库,
                    安全性”-->“用户下,找到刚才添加的IUSR_**(匿名用户)。设置他对该数据库的访问权限。(如图)
  1  IUSR_**(匿名用户)上右键菜单选属性
  2  弹出的对话框中选择安全对象
  3  点击添加…”
  4  再次弹出的对话框中选择特定类型的所有对象(T)....”
  5  点击确定按钮。
  6、在弹出的对话框中的选择要查找的对象类型(S)”列表框中选数据库
  7  点击确定
     


还是第三步:选择IUSR_**(匿名用户)对该数据库许可的操作。

    1、在“*** 的显示权限(P列表中,找到SelectExecute(如果不执行存储过程,可以不选),勾选。
  (注:你会看到Connect后面是默认勾选的,因为前面设置的默认登录到数据库就是该数据库)
    2、点击确定

   

第四步:设置IUSR_**(匿名用户)的登录密码。
    1.控制面板-->管理工具-->计算机管理-->本地用户和组-->选择“IUSR_**(匿名用户)”-->设置密码.(如图)-->在弹出窗口中点击继续”-->在弹出窗口中修改密码。
   


  
第五步:打开IIS管理器,设置ReportServer虚拟目录为匿名访问。

   1  打开IIS管理器,在ReportServer虚拟目录上单击邮件选择属性
  2,3  目录安全性页面,找到身份验证和访问控制,点击编辑...”
   4  在弹出的身份验证方法对话框,勾选启用匿名访问
   5  在密码输入框中输入在第四步中修改的密码。
   6  用户访问需经过身份验证的位置,默认是选中集成Windows身份验证。在这儿可以不用修改它。
            如果去掉了集成Windows身份验证前面的勾选,则本机(IIS服务器所在机器)对Reporting Services Web站点的访问也成了匿名访问。
    7  点击确定
     


第六步:再通过其他的客户端机器访问Reporting Services Web站点,则不再出现Windows用户登录窗口。对Reporting Services Web站点的访问已经更改为匿名用户的访问。

         SQL Server Reporting Services 远程匿名访问解决办法_第1张图片
但是注意,有个问题会同时出现。我们再次访问http://localhost/reports 时发现,将不能对Reporting Services的权限分配。
打开http://localhost/reports 能够看到的是只有内容一个分类页面的选项,属性选项则不会出现了。
这该是Reporting Services产品刻意设计的,因为所有的用户都可以匿名访问Web站点了,权限如果放开了随便改肯定不行。

如果再需要修改/reports属性,唯一能做的就是重新打开IIS的管理器,去掉/reportserver中的匿名访问选项,再来修改。
修改后,再将/reportserver改为匿名访问

 

最后别忘记了,修改配置文件(d:/Program Files/Microsoft SQL Server/MSSQL.3/Reporting Services/ReportServer/rsreportserver.config):

http://192.192.192.225/reportserver

 

你可能感兴趣的:(Ms,SQL,Server,sql,server,数据库,iis,microsoft,报表,windows)