4

我有一個ASP.NET站點通過SQLMemberShipProvder使用基於角色的安全性。SQL Reporting Services可以與ASP會員供應商一起使用嗎?

是否可以使用我現有的MembershipProvider角色提供對SSRS報告的Internet訪問?

例如,如果我有SupportPersonRole角色,我是否只允許該角色中的人員使用某些報告?

文檔說SQL 2008 R2使用基本身份驗證到本地安全機構。但是,如果SSRS只能提供自己的基本身份驗證登錄SSRS內容,我不知道我將如何有機會授權使用MembershipProvider角色。

ASP.Net頁面需要處理報告參數提示,所以這似乎意味着「遠程」模式適合獲取此功能。

令人困惑的部分是SSRS(處於遠程模式)具有自己的角色安全憑證,它與基於ASP.Net角色的安全性是分開的。那麼如何避免在兩個地方管理安全?

回答

4

如果您在網站中包含報表查看器控件,則可以限制哪些人可以看到此頁面,以及他們可以通過網站前端運行哪些報表。

然後可以保護您通過SSRS服務器(從Web服務器到它)的連接,以便只有您的站點才能訪問這些報告。

+0

這是一個MVC站點 - 您提到的控件是否需要WinForms? – Lee 2012-03-19 15:42:21

+0

它確實存在,但也有方法和手段。大量的鏈接,例如http://stackoverflow.com/questions/4137835/viewing-ssrs-reports-in-an-asp-net-mvc-site – Paddy 2012-03-19 15:51:01

+0

好的,該鏈接證明該控件可以在MVC中作爲ASPX頁面工作。但問題的關鍵部分仍然是在ASPX頁面上,特定報告如何限制爲特定的MembershipProvider角色? – Lee 2012-03-19 16:17:30

4

您也可以將LocalReport呈現給您所選擇的輸出。如果您不需要控制系統提供的選擇,這可能是一個不錯的選擇。

// Controller Action 
public ActionResult GetReport(ReportParameters foo) 
{ 
    string mimeType; 
    var stream = foo.RenderReport(out mimeType); 
    return new FileStreamResult(stream, mimeType); 
} 

class ReportParameters { 
    public Stream RenderReport(out string mimeType) 
    { 
     var localReport = new LocalReport(); 
     // ... TODO: Set up report data sources render call out variales, etc. 
     byte[] renderedBytes; 
     renderedytes = localReport.Render(
       reportType, 
       deviceInfo, 
       out mimeType, 
       out encoding, 
       out fileNameExtension, 
       out streams, 
       out warnings); 
     return new MemoryStream(renderedBytes); 
    } 
} 
+0

如果我理解正確,本地模式不會提供自動報告參數提示(rdl vs. rdlc)。 – Lee 2012-03-19 19:14:03

+0

這是正確的。 – 2012-03-20 04:36:40