我已经向 SSRS 报告服务器添加了许多数据源登录无效的报告,我想使用脚本更新用户名和密码来更新它,这样我就不必单独更新每个报告。
但是,据我所知,这些字段存储为图像并已加密。我找不到有关它们如何加密或如何更新它们的任何信息。用户名和密码似乎存储在 dbo.DataSource 表中。有任何想法吗?我希望脚本在 SQL 中运行。
登录信息示例:
我已经向 SSRS 报告服务器添加了许多数据源登录无效的报告,我想使用脚本更新用户名和密码来更新它,这样我就不必单独更新每个报告。
但是,据我所知,这些字段存储为图像并已加密。我找不到有关它们如何加密或如何更新它们的任何信息。用户名和密码似乎存储在 dbo.DataSource 表中。有任何想法吗?我希望脚本在 SQL 中运行。
登录信息示例:
我对破解 Reporting Services 表非常、非常、非常谨慎。可能有人可以提供一种可靠的方法来执行您的建议,但我觉得这是破坏整个安装的好方法。
我的建议是您使用 Reporting Services API 并编写一个小型应用程序来为您执行此操作。API 的功能非常全面——几乎可以从 Report Manager 网站做任何事情,您可以使用 API 进行操作——而且使用起来相当简单。
以下代码并不完全符合您的要求——它将报告指向一个共享数据源——但它应该向您展示您需要做什么的基础知识。
public void ReassignDataSources()
{
using (ReportingService2005 client = new ReportingService2005)
{
var reports = client.ListChildren(FolderName, true).Where(ci => ci.Type == ItemTypeEnum.Report);
foreach (var report in reports)
{
SetServerDataSource(client, report.Path);
}
}
}
private void SetServerDataSource(ReportingService2005 client, string reportPath)
{
var itemSources = client.GetItemDataSources(reportPath);
if (itemSources.Any())
client.SetItemDataSources(
reportPath,
new DataSource[] {
new DataSource() {
Item = CreateServerDataSourceReference(),
Name = itemSources.First().Name
}
});
}
private DataSourceDefinitionOrReference CreateServerDataSourceReference()
{
return new DataSourceReference() { Reference = _DataSourcePath };
}
我怀疑这是否直接回答了您的问题,但我希望它可以提供一些帮助。 MSDN 指定凭据
出于这个原因,MSDN 还建议使用共享数据源:请参阅MSDN on shared data sources