如何在SQL Server Reporting Services中更改订阅的所有者

Kiw*_*ige 14 reporting-services

此前的DBA设置了一些SQL Server Reporting Services报告以自动运行并通过电子邮件将报告发送给用户.当他离开他的帐户时被禁用,现在他们不工作.订阅状态如下:

发送邮件失败:授予用户'OURDOMAIN\old_DBA_Username'的权限不足以执行此操作.

有没有一种简单的方法可以更改所有者,我在订阅表中的RS数据库中找到了所有者字段,虽然只是更改了它,但是不想破坏我们的生产报告服务?

另一种选择当然是创建一个新的订阅并删除旧的,但是有一种更好的方式.

nto*_*ela 9

这里发布的解决方案对我有用.基本上,您可以通过运行下面的脚本直接在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
Run Code Online (Sandbox Code Playgroud)


bri*_*nng 5

我之前遇到过这个问题,并在Jeremiah Clark的博客上找到了这篇文章的答案.

要点是,您正在使用新用户更新ReportServer数据库的Subscriptions表中的Owner字段.

无论如何,为我工作.

  • 如果这实际上包含答案而不仅仅是链接,我会投票。 (2认同)

小智 5

您也可以在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);
        }
    }
}

}
Run Code Online (Sandbox Code Playgroud)