2013-06-12 34 views
0

我们有一个运行报表服务的SQL 2008 R2服务器,我想识别使用特定凭证连接到数据源的报表。在这种情况下,报告使用具有特定用户帐户的自定义数据源连接到数据源,该帐户在SQL Server上具有适当的安全性以运行报告。使用ReportingService API读取自定义数据源凭据

计划计划是查询[ReportServer]。[dbo]。[Catalog]以获取报告列表。然后通过下面的代码运行它,以使用我感兴趣的凭据来识别报告。所有这些都将在SSIS包中完成。

使用ReportingService API,我可以读取共享数据源的连接字符串中的凭据的用户名。代码如下所示。但是,就我而言,我需要从特定于报告的自定义数据源加载数据源凭据,而不是共享数据源。 GetDataSourceContents方法似乎不支持这一点。如果我提供报告名称&而不是共享数据源,则会生成错误。

是否有另一种方法来解决这个问题?我们有数百个报告,因此使用UI来查看这些信息将是不切实际的。

在此先感谢。

注: “使用web_service” 是Web服务引用到报表服务器(HTTP:// [服务器] /ReportServer/ReportService2005.asmx?WSDL)

Dim rs As New web_service.ReportingService2005() 
rs.Credentials = System.Net.CredentialCache.DefaultCredentials 

Dim ds_def As web_service.DataSourceDefinition 

ds_def = rs.GetDataSourceContents("/Data Sources/data_source_1") 

With MyCredentialsOutputBuffer 
    .AddRow() 
    .UserName = ds_def.UserName 
End With 

回答

0

您需要拉下RDL内容并解析它:(

嵌入式数据源的信息存储在将.rdl并经由API获得不共享数据设置项,即使则无法检索数据源的密码。

+0

的ReportServer.dbo .DataSource表包含有关特定报告i的自定义数据源的数据包括什么似乎是二进制证书。这让我相信自定义数据源凭据存储在rdl报告定义文件之外。但是,我会尝试查找rdl文件。 –

+0

更新:看起来像解析rdl文件将无法正常工作。 rdl文件指向共享数据源。我证实了这一点,我在BIDS中看到它。但是,报表服务器上的报表使用自定义数据源。实际的自定义数据源连接字符串和凭证存储在ReportServer.dbo.DataSource表中。看起来不像有什么办法可以达到这个目标。 –