我们有一个运行报表服务的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
的ReportServer.dbo .DataSource表包含有关特定报告i的自定义数据源的数据包括什么似乎是二进制证书。这让我相信自定义数据源凭据存储在rdl报告定义文件之外。但是,我会尝试查找rdl文件。 –
更新:看起来像解析rdl文件将无法正常工作。 rdl文件指向共享数据源。我证实了这一点,我在BIDS中看到它。但是,报表服务器上的报表使用自定义数据源。实际的自定义数据源连接字符串和凭证存储在ReportServer.dbo.DataSource表中。看起来不像有什么办法可以达到这个目标。 –