此前的DBA设置了一些SQL Server Reporting Services报告以自动运行并通过电子邮件将报告发送给用户.当他离开他的帐户时被禁用,现在他们不工作.订阅状态如下:
发送邮件失败:授予用户'OURDOMAIN\old_DBA_Username'的权限不足以执行此操作.
有没有一种简单的方法可以更改所有者,我在订阅表中的RS数据库中找到了所有者字段,虽然只是更改了它,但是不想破坏我们的生产报告服务?
另一种选择当然是创建一个新的订阅并删除旧的,但是有一种更好的方式.
这里发布的解决方案对我有用.基本上,您可以通过运行下面的脚本直接在SSRS数据库中调整订阅所有者.
DECLARE @OldUserID uniqueidentifier DECLARE @NewUserID uniqueidentifier SELECT @OldUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAINA\OldUser' SELECT @NewUserID = UserID FROM dbo.Users WHERE UserName = 'DOMAINA\NewUser' UPDATE dbo.Subscriptions SET OwnerID = @NewUserID WHERE OwnerID = @OldUserID
我之前遇到过这个问题,并在Jeremiah Clark的博客上找到了这篇文章的答案.
要点是,您正在使用新用户更新ReportServer数据库的Subscriptions表中的Owner字段.
无论如何,为我工作.
您也可以在Visual Studio中的C#中执行此操作。依此类推,在报表服务器上创建一个对ReportService2010.asmx的Web引用。
public class ChangeOwner { public string OldOwner { get; set; } public string NewOwner { get; set; } public ChangeOwner() { } public void ChangeReportOwner() { ReportingService2010 rs = new ReportingService2010(); //set the URL to your report server rs.Url = "http://youserver/ReportServer/ReportService2010.asmx"; rs.Credentials = System.Net.CredentialCache.DefaultCredentials; Subscription[] items = rs.ListSubscriptions("/"); foreach(Subscription item in items) { if(item.Owner.ToUpper() == this.OldOwner.ToUpper()) { Console.WriteLine("Updating report " + item.Path + " " + item.Owner); rs.ChangeSubscriptionOwner(item.SubscriptionID, this.NewOwner); } } } }