zoukankan      html  css  js  c++  java
  • 实现SQL Server 2008 Reporting Services匿名访问报表有两种方法


    一、通过修改SQL Server 2008的配置文件,去掉Windows的验证。

    1.首先我们找到SQL安装目录下的两个Web.config配置文件,默认安装目录分别是
    (C:Program FilesMicrosoft SQL ServerMSRS10.MSSQLSERVERReporting ServicesReportServer和C:Program FilesMicrosoft SQL ServerMSRS10.MSSQLSERVERReporting ServicesReportManager)
    或者(C:Program FilesMicrosoft SQL ServerMSRS10_50.MSSQLSERVERReporting ServicesReportServer和C:Program FilesMicrosoft SQL ServerMSRS10_50.MSSQLSERVERReporting ServicesReportManager)
    ,然后,找到两个配置文件中的

    <authentication mode="windows"/> <identity impersonate="true"/>    

    将其改为:

    <authentication mode="None"/> <identity impersonate="false" />  


    2.找到(C:Program FilesMicrosoft SQL ServerMSRS10.MSSQLSERVERReporting ServicesReportServer)目录下的rsreportserver.config文件,找到配置文件中的
       

    <Authentication>   
         <AuthenticationTypes>   
             <RSWindowsNegotiate/>   
             <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>

    然后找到配置文件中的

    <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>  

    这里需要引用一个DLL文件,就是Microsoft.Samples.ReportingSerices.
     
    3.将dll放入到目录C:Program FilesMicrosoft SQL ServerMSRS10.MSSQLSERVERReporting ServicesReportServerin,接下来继续修改我们的配置文件,在(C:Program FilesMicrosoft SQL ServerMSRS10.MSSQLSERVERReporting ServicesReportServer)目录下,找到rssrvpolicy.config找到

    <CodeGroup 
            class="FirstMatchCodeGroup"
            version="1"
            PermissionSetName="Nothing">
        <IMembershipCondition 
                class="AllMembershipCondition"
                version="1"
        />

    在其下边追加如下节点(红色部分,按照你的实际路径而定)

    <CodeGroup class="UnionCodeGroup" version="1" PermissionSetName="FullTrust" Name="Private_assembly" Description="This code grou p grants custom code full trust.">   
        <IMembershipCondition class="UrlMembershipCondition" version="1" Url="C:Program FilesMicrosoft SQL ServerMSRS10_50.MSSQLSERVER2008Reporting ServicesReportServerinMicrosoft.Samples.ReportingServices.AnonymousSecurity.dll"/>   
    </CodeGroup>   

    到此为止,我们匿名登录的方式,配置工作就完成了。
     
    二、利用接口IReportServerCredentials 和IReportServerConnection将Windows的用户名和密码传进去以实现匿名访问报表。
    1.利用IReportServerCredentials 接口
    接口定义为:

    using System;
    using Microsoft.Reporting.WebForms;
    using System.Net;
    using System.Security.Principal;
    using System.Configuration;
    
    namespace SqlReport
    {
        [Serializable]
        internal class MyConfigFileCredentials : IReportServerCredentials
        {
            public MyConfigFileCredentials()
            {
            }
    
            public WindowsIdentity ImpersonationUser
            {
                get { return null; }
            }
    
            public ICredentials NetworkCredentials
            {
                get
                {
                    return new NetworkCredential("Administrator", "123456"); //windows的用户名和密码  
                }
            }
    
            public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password,
                out string authority)
            {
                authCookie = null;
                userName = null;
                password = null;
                authority = null;
                return false;
            }
        }
    }

    在调用报表的代码如下:

    using System;
    using System.Web;
    using Microsoft.Reporting.WebForms;
    
    namespace SqlReport
    {
        public partial class _Default : System.Web.UI.Page
        {
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if ((!IsPostBack) && Request.QueryString.Count > 0)
                {
                    string reportPath = Request.QueryString[0];
                    this.ReportLabel.Text = Request.QueryString[0];
    
                    this.ReportViewer3.ProcessingMode = ProcessingMode.Remote;
                    MyConfigFileCredentials rsc = new MyConfigFileCredentials();
    
                    this.ReportViewer3.ServerReport.ReportServerCredentials = rsc;
                    this.ReportViewer3.ServerReport.ReportPath = reportPath;
                    this.ReportViewer3.ServerReport.ReportServerUrl =
                        new Uri((Properties.Settings.Default.MyReportServerUrl));
                    this.ReportViewer3.ServerReport.Refresh();
                }
            }
        }
    }

    2.利用IReportServerConnection接口,接口定义:

    using System;
    using System.Collections.Generic;
    using System.Net;
    using System.Security.Principal;
    using Microsoft.Reporting.WebForms;
    
    namespace SqlReport
    {
        [Serializable]
        public class MyReportServerConnection : IReportServerConnection
        {
            public Uri ReportServerUrl
            {
                get
                {
                    string url = Properties.Settings.Default.MyReportServerUrl;
                    if (string.IsNullOrEmpty(url))
                        throw new Exception("Missing url from the Web.config file");
                    return new Uri(url);
                }
            }
    
            public int Timeout
            {
                // set timeout to 60 seconds  
                get { return 60000; }
            }
    
            public IEnumerable<Cookie> Cookies
            {
                // No custom cookies  
                get { return null; }
            }
    
            public IEnumerable<string> Headers
            {
                // No custom headers  
                get { return null; }
            }
    
            public MyReportServerConnection()
            {
            }
    
    
            public WindowsIdentity ImpersonationUser
            {
                get { return null; }
            }
    
            public ICredentials NetworkCredentials
            {
                get
                {
                    //this will force the use of impersonation,   
                    // otherwise, remove the return null and   
                    // implement the other app settings to specify the credential details  
                    // return null;  
                    string userName = Properties.Settings.Default.myReportViewerUser;
                    if (string.IsNullOrEmpty(userName))
                        throw new Exception("Missing user name from Web.config file");
                    string password = Properties.Settings.Default.MyReportViewerPassword;
                    if (string.IsNullOrEmpty(password))
                        throw new Exception("Missing password from Web.config file");
                    string domain = Properties.Settings.Default.MyReportViewerDomain;
                    if (string.IsNullOrEmpty(domain))
                        throw new Exception("Missing domain from Web.config file");
                    return new NetworkCredential(userName, password, domain);
                    //return new NetworkCredential(userName, password);  
                }
            }
    
            public bool GetFormsCredentials(out Cookie authCookie, out string userName, out string password,
                out string authority)
            {
                authCookie = null;
                userName = null;
                password = null;
                authority = null;
                return false;
            }
        }
    }

     在调用报表的代码如下:

    using System;
    using System.Web;
    using Microsoft.Reporting.WebForms;
    
    namespace SqlReport
    {
        public partial class _Default : System.Web.UI.Page
        {
    
            protected void Page_Load(object sender, EventArgs e)
            {
                if ((!IsPostBack) && Request.QueryString.Count > 0)
                {
                    string reportPath = Request.QueryString[0];
                    this.ReportLabel.Text = Request.QueryString[0];
    
                    this.ReportViewer3.ProcessingMode = ProcessingMode.Remote;
                    MyReportServerConnection rsc = new MyReportServerConnection();
    
                    this.ReportViewer3.ServerReport.ReportServerCredentials = rsc;
                    this.ReportViewer3.ServerReport.ReportPath = reportPath;
                    this.ReportViewer3.ServerReport.ReportServerUrl =
                        new Uri((Properties.Settings.Default.MyReportServerUrl));
                    this.ReportViewer3.ServerReport.Refresh();
                }
            }
        }
    }

    OK完成啦。

  • 相关阅读:
    饿了么P7级前端工程师进入大厂的面试经验
    前端程序员面试的坑,简历写上这一条信息会被虐死!
    这次来分享前端的九条bug吧
    移动端开发必会出现的问题和解决方案
    创建一个dynamics 365 CRM online plugin (八)
    创建一个dynamics 365 CRM online plugin (七)
    创建一个dynamics 365 CRM online plugin (六)
    创建一个dynamics 365 CRM online plugin (五)
    使用User Primary Email作为GUID的问题
    怎样Debug Dynamics 365 CRM Plugin
  • 原文地址:https://www.cnblogs.com/puke/p/3512200.html
Copyright © 2011-2022 走看看