我有一堆報告作爲RDL部署到SSRS。由於高安全性要求,db密碼變化非常頻繁。要跟上這些變化,並在數十次報告中修改數十項變成一項艱鉅的任務。這導致我的問題...SQL報告服務 - 以編程方式設置數據源?
是否有可能以編程方式爲已部署的報告設置數據源或連接字符串?
這樣做是否可以使用應用程序來修改報告本身,因爲它位於服務器上?
這可以通過在DS位於服務器上時從應用程序修改共享數據源來完成嗎?
是否可以通過在報告中嵌入腳本來完成從Web服務檢索連接的腳本?
感謝
我有一堆報告作爲RDL部署到SSRS。由於高安全性要求,db密碼變化非常頻繁。要跟上這些變化,並在數十次報告中修改數十項變成一項艱鉅的任務。這導致我的問題...SQL報告服務 - 以編程方式設置數據源?
是否有可能以編程方式爲已部署的報告設置數據源或連接字符串?
這樣做是否可以使用應用程序來修改報告本身,因爲它位於服務器上?
這可以通過在DS位於服務器上時從應用程序修改共享數據源來完成嗎?
是否可以通過在報告中嵌入腳本來完成從Web服務檢索連接的腳本?
感謝
這可以通過多種方式來完成,我認爲最簡單的一種是使用SSRS Web服務的API。 Web服務允許您操縱所有報告實體,包括Data Sources。
作爲此問題的解決方案,每次數據庫密碼更改(甚至使用某種觸發器自動執行它)時,都可以使用對Web服務的調用來更新數據源憑據。
我在一個項目中做了類似的工作,其中RDL和數據源必須在運行時生成,部署和操作,並且工作良好,因此更新數據源必須可行。
爲您的報告服務端點添加項目的服務引用(http://ReportServerHost.mydomain.tld/ReportServer/ReportService2005.asmx
)。使用以下代碼修改數據源密碼:
public static void ChangeDataSourcePassword(string dataSourcePath, string password)
{
using (ReportingService2005SoapClient reportingService = new ReportingService2005SoapClient())
{
reportingService.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;
try
{
ServerInfoHeader serverInfo = null;
DataSourceDefinition dataSourceDefinition = null;
serverInfo = reportingService.GetDataSourceContents(dataSourcePath, out dataSourceDefinition);
dataSourceDefinition.Password = password;
serverInfo = reportingService.SetDataSourceContents(null, dataSourcePath, dataSourceDefinition);
}
catch (FaultException ex)
{
// Do something with the exception. Rethrow it and/or show it to the user.
Console.WriteLine(string.Format("Failed to change the password on {0}: {1}", dataSourcePath, ex.Message));
throw new ApplicationException("Failed to change the password on the Data Source.", ex);
}
}
}