SSRS 報表 如何匿名查看


SSRS 報表 如何匿名查看

昨晚一直研究怎么能匿名訪問報表然后給客戶看呢?

研究了好幾種辦法

我試過的分為三種,其中推薦我認為相對可控一點。

1.修改SSRS配置文件來禁止他驗證登陸用戶權限
 操作過的文章:SSRS匿名登錄
 可以完全匿名訪問,因為我們系統是涉及到客戶要自己做報表的,所以這里屏蔽了權限問題,那么這種辦法對我來說是不可行的。
2.修改IIS配置
 操作過的文章:匿名訪問的一個間接方法
 這種辦法和第三種類似但是這個是直接操作IIS的如果集成到系統中也不是很科學。

我用的是通過程序偽裝登陸之后獲得報表

我覺得這樣的好處是,可以控制此賬戶只有瀏覽的權限,並不破壞任何東西

需要做的就是兩點:

1.前台還是一樣,一個ScriptManager 一個ReportViewer

2.而后台代碼這樣寫。其中把登陸用戶名和賬戶都存到存到配置文件當中。請自行添加

3.這個類的介紹:https://msdn.microsoft.com/en-us/library/microsoft.reporting.webforms.ireportservercredentials.aspx

public partial class One : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ReportParameter para
= new ReportParameter("ReportParameter1", "1");
ReportViewer1.ServerReport.ReportServerCredentials
= new MyReportServerCredentials();
ReportViewer1.ServerReport.ReportServerUrl
= new Uri("http://報表服務器地址/reportserver");
ReportViewer1.ServerReport.ReportPath
= "/報表地址";
ReportViewer1.ServerReport.SetParameters(
new ReportParameter[] { para });
}

}

}
[Serializable]
public sealed class MyReportServerCredentials : IReportServerCredentials
{
public WindowsIdentity ImpersonationUser
{
get
{
// Use the default Windows user. Credentials will be
// provided by the NetworkCredentials property.
return null;
}
}

public ICredentials NetworkCredentials
{
get
{
// Read the user information from the Web.config file.
// By reading the information on demand instead of
// storing it, the credentials will not be stored in
// session, reducing the vulnerable surface area to the
// Web.config file, which can be secured with an ACL.

// User name
string userName =
ConfigurationManager.AppSettings
[
"myReportViewerUser"];

if (string.IsNullOrEmpty(userName))
throw new Exception(
"Missing user name from web.config file");

// Password
string password =
ConfigurationManager.AppSettings
[
"MyReportViewerPassword"];

if (string.IsNullOrEmpty(password))
throw new Exception(
"Missing password from web.config file");

// Domain
string domain =
ConfigurationManager.AppSettings
[
"MyReportViewerDomain"];

if (string.IsNullOrEmpty(domain))
throw new Exception(
"Missing domain from web.config file");

return new NetworkCredential(userName, password, domain);
}
}

public bool GetFormsCredentials(out Cookie authCookie,
out string userName, out string password,
out string authority)
{
authCookie
= null;
userName
= null;
password
= null;
authority
= null;

// Not using form credentials
return false;
}
}

可以成功訪問了。。

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com