我最近将SSRS实例从SQL 2008 R2复制到新的SQL 2012实例。我在报表服务器数据库和加密密钥上执行了备份/恢复,并配置了服务/执行帐户等。我可以通过报表管理器运行报表而不会发生任何事故。我可以按照运行正常的相同方式创建新订阅。
但是,只要之前存在的订阅(在R2下设置)之一运行,它就会失败,并显示以下错误:
Microsoft.ReportingServices.Diagnostics.Utilities.AuthorizationExtensionException: An error occurred when invoking the authorization extension. ---> System.ArgumentNullException: SafeHandle cannot be null.
建议似乎是这与自定义安全组件有关,但我们没有。我们确实有一个用于其他目的的自定义DLL,但是当有问题的订阅运行时它甚至没有被调用,所以它的可能性很小。 CAS已为此DLL配置。
我真的在寻找有关从何处开始寻求解决此错误的建议,因为我对想要尝试的内容缺乏想法!
答案 0 :(得分:1)
我在MSDN and got an answer上发布了同样的问题,建议可能是旧服务器上复制的订阅是由新服务器上不存在的本地用户创建的。
经过一番调查,事实证明是这样的。似乎SSRS需要订阅创建者(Report Server DB中的Subscriptions表中的OwnerID字段)才是有效帐户,因为它在尝试运行订阅时必须执行某种验证。
一旦我将其更改为有效的域帐户(本地帐户也可以正常工作),订阅一切正常。