2014-01-22 111 views

回答

1

好的,首先,爲什麼?做暴露連接字符串等事情會暴露安全風險,甚至會涉及到糟糕的做法。說有幾件事情,但沒有一件是優雅和更多的參與。

  1. 如果您的報告是「已部署」,則在SSRS所在的服務器上的「ReportServer」上有一個目錄。這假設你有一個SSRS服務器,報告是一個「託管」的RDL報告而不是RDLC報告。說,你可以把數據集中的sql得到這些將類似於:

    WITH ItemContentBinaries AS 
    (
    SELECT 
        Name 
    , Type 
    , CONVERT(VARBINARY(MAX), Content) AS Content 
    FROM ReportServer.dbo.Catalog 
    WHERE Type = 5 -- datasources 
    ) 
    , ItemContentNoBOM AS 
    (
    SELECT 
        Name 
    , CASE WHEN LEFT(Content, 3) = 0xEFBBBF THEN CONVERT(VARBINARY(MAX),  SUBSTRING(Content, 4,LEN(Content))) 
         ELSE Content 
         END AS Content 
    FROM ItemContentBinaries 
    ) 
    , xmlcontent as 
    (
    SELECT 
        Name AS DataSourceName 
    , CONVERT(xml, replace(Content, 'xmlns="http://schemas.microsoft.com/sqlserver/reporting/2006/03/reportdatasource"', '')) AS ContentXML 
    FROM ItemContentNoBOM 
    ) 
    Select  
    DataSourceName 
    , ContentXML 
    , ContentXML.query('/DataSourceDefinition/ConnectString/.').value('.', 'varchar(max)') 
    from xmlcontent 
    
  2. 您可以嘗試將「自定義代碼」在您的報告,從RDL語言的連接字符串。 http://social.msdn.microsoft.com/Forums/sqlserver/en-US/27de3f46-5174-480d-b4d1-5e32772dae35/ssrs-2005-custom-code-shared-data-source-connection-string?forum=sqlreportingservices

  3. 您可能在C#或VB.net的代碼中做類似的事情來獲取值,但我相信我必須託管報告。它的代碼是類似於此:

    How to get the data source information from a SSRS report, using .NET

  4. 你可以做的2和3的變化和消費」 .rds'文件和XML解析出來的C#或VB.NET。

所有這些解決方案都要求使用報告正在部署或你認識的一個服務器上的固定位置是該報告的數據源是,除了2,我從來沒有嘗試過。據我所見,連接字符串是一個嵌入式對象,因爲它可能包含密碼,所以不會被公開。

+0

確實,我需要jsut服務器和數據庫名稱。 =)不是整個連接字符串。 –

相關問題