【发布时间】:2013-10-16 18:57:08
【问题描述】:
我开发了一个自定义安全扩展程序,以便从我们的 Intranet 产品单点登录到报告服务。在我订阅之前,它就像一个魅力。
开发确实喜欢这里的建议: http://msdn.microsoft.com/en-us/library/ms155029.aspx
登录、上传和管理报告工作。每个用户都可以阅读和打开报告。 我们还实现了授权并覆盖了此处描述的功能: http://msdn.microsoft.com/en-us/library/ms152800.aspx
管理文件夹,报告也可以。
当我发布订阅以呈现报告以通过电子邮件发送报告时,系统会说用户没有足够的权限通过电子邮件发送报告。
notification!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: Handling subscription f70f374e-28fa-4ba2-8b0e-6633f1299ee9 to report Projekt Aufwand, owner: rausch, delivery extension: Report Server Email.
library!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: RenderForNewSession('/Projektverwaltung/Projekt Aufwand')
library!WindowsService_0!1674!10/09/2013-14:02:04:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: , Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus.;
library!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: Initializing EnableExecutionLogging to 'True' as specified in Server system properties.
emailextension!WindowsService_0!1674!10/09/2013-14:02:04:: e ERROR: Error sending email. Exception: Microsoft.ReportingServices.Diagnostics.Utilities.RSException: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus. ---> Microsoft.ReportingServices.Diagnostics.Utilities.AccessDeniedException: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus.
notification!WindowsService_0!1674!10/09/2013-14:02:04:: i INFO: Notification 6241f7f4-6225-44ea-b8ff-3654960ae218 completed. Success: True, Status: Fehler beim Senden von E-Mail: Die dem Benutzer 'rausch' erteilten Berechtigungen reichen zum Ausführen des Vorgangs nicht aus.E-Mails werden nicht erneut gesendet., DeliveryExtension: Report Server Email, Report: Projekt Aufwand, Attempt 0
解决方法:我打开 ReportServer 数据库中的 subscriptions 表,并将 OwnerId UserId 替换为报表服务器管理员的 userId。然后订阅在管理员权限下运行并且可以正常工作。
有人知道我可以在哪里查看/检查以设置正确的权限吗?还是我必须在 CheckAccess 覆盖方法中添加一些代码?
部分代码:
m_RptOperNames.Add(ReportOperation.CreateSubscription,
OperationNames.OperCreateSubscription);
m_RptOperNames.Add(ReportOperation.DeleteSubscription,
OperationNames.OperDeleteSubscription);
m_RptOperNames.Add(ReportOperation.ReadSubscription,
OperationNames.OperReadSubscription);
m_RptOperNames.Add(ReportOperation.UpdateSubscription,
OperationNames.OperUpdateSubscription);
m_RptOperNames.Add(ReportOperation.CreateAnySubscription,
OperationNames.OperCreateAnySubscription);
m_RptOperNames.Add(ReportOperation.DeleteAnySubscription,
OperationNames.OperDeleteAnySubscription);
m_RptOperNames.Add(ReportOperation.ReadAnySubscription,
OperationNames.OperReadAnySubscription);
m_RptOperNames.Add(ReportOperation.UpdateAnySubscription,
OperationNames.OperUpdateAnySubscription);
这里我把整个c#类的代码搬过来调查一下:https://docs.google.com/file/d/0B02JCr49NYlUeDFVbWt2NVdpUmc/edit?usp=sharing
我没有看到任何执行或电子邮件订阅,但它不是参考代码的一部分。会这样吗?
编辑
看到这个:http://msdn.microsoft.com/en-us/library/bb283182.aspx 谁能告诉我通过电子邮件订阅订阅需要什么项目权限?然后我可以更深入地了解需要授予哪些项目。
更新
我仍然有这个问题,但我现在更聪明了:)。
事实上,电子邮件传递由 WindowsService Reportserver 使用的Microsoft.ReportingServices.Library.TimedSubscriptionHandler 处理。
如果您使用报告链接设置订阅,即使使用 CustomSecurity 扩展,订阅也只能工作! 添加报表使系统呈现报表。报表服务器在那里创建一个新会话,并且没有授予权限。我还不知道自定义安全扩展的继承是否在这里有效。
也许一些 SSRS / .NET 大师有一些技巧,在网上搜索了几个小时并没有给我任何解决方案。
解决方法:目前我在订阅上设置了一个触发器并将 OwnerId 替换为管理员 ID。
CREATE TRIGGER Subscription_overwrite_owner
ON dbo.Subscriptions
AFTER INSERT, UPDATE
AS
BEGIN
-- replace the OwnerId with the uid from the admin account
-- so the TimedSubscription runs with correct credentials
UPDATE dbo.Subscriptions SET OwnerID = 'uuid admin from Users table'
END
GO
【问题讨论】:
标签: c# reporting-services permissions customization