gpt4 book ai didi

c# - 使用自定义安全扩展的 SSRS 中的错误订阅传递

转载 作者:太空狗 更新时间:2023-10-29 23:31:47 27 4
gpt4 key购买 nike

我开发了一个自定义安全扩展,以便从我们的 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谁能告诉我通过电子邮件订阅需要什么项目权限?然后我可以更深入地了解需要授予什么 Item。

更新

我仍然有这个问题,但我现在更聪明了:)。事实上,电子邮件传送由 WindowsService Reportserver 使用的 Microsoft.ReportingServices.Library.TimedSubscriptionHandler 处理。

如果您使用报告链接设置订阅,即使使用 CustomSecurity 扩展,订阅也能正常工作!添加报表使系统呈现报表。报表服务器在那里创建一个新 session ,并且没有授予权限。我还不知道自定义安全扩展的继承在这里是否有效。

也许一些 SSRS/.NET 大师有一些提示,在网上搜索了几个小时没有给我任何解决方案。

解决方法:目前我在订阅上设置了一个触发器,并将 OwnerId 替换为 Admin 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

最佳答案

我更希望别人找到答案,但几个月以来我一直没有人继续调查问题所在。最后,获胜者是...

不用说我使用示例项目来实现自定义安全扩展。

我让它在我的环境中运行!

  1. 我确实使用示例 CustomSecurity 设置了安全扩展项目
  2. 一切正常,除非订阅包含附件(如呈现的报告)。
  3. 我后来发现它适用于管理员用户设置在 rsreportserver.config(<Security><Configuration> 这是从 SetConfiguration 设置加载。
  4. 示例项目向我们展示了我们将应用程序设置存储在web.config !

我确实在 web.config 中为我的自定义安全扩展存储了许多参数!

在前端和渲染报告中一切正常。但是当涉及到带有附件的订阅时,我们会遇到权限错误......

它适用于管理员,因为如果用户是管理员,CustomSecurity 示例项目会授予访问权限!

但是 ReportServicesService.exe 并没有从 web.config 获取配置数据!

这就是为什么我的所有 CheckAccess() 方法都无法检查其他安全设置的原因,因为在 web.config 中我们存储了例如如果我们使用自定义数据库获取连接字符串。

因此,您现在可以重写代码并将所有配置数据从 web.config 移动到 rsreportserver.config 文件中。

或者您也可以将您的 web.config 应用程序也添加到/bin/ReportingServicesService.exe.config。

以我为例:

<configuration>
<configSections>
<section name="RStrace" type="Microsoft.ReportingServices.Diagnostics.RSTraceSectionHandler,Microsoft.ReportingServices.Diagnostics" />
<!-- custom authentication start -->
<section name="CustomSecurity" requirePermission="false" />
<!-- custom authentication end -->
</configSections>
<!-- custom authentication start -->
<appSettings>
<add key="log" value="d:\log"/>
<add key="multi_company" value="true"/>
<add key="default_domain" value="fqdn.domain.de"/>
<add key="connection" value="database=ReportServer;server=(local);uid=sa;pwd=secret;" />
</appSettings>
<!-- custom authentication end -->

这没有写在什么地方,我花了一段时间才弄明白......

希望对使用自定义表单例份验证和 SSRS 的每个人有所帮助。

关于c# - 使用自定义安全扩展的 SSRS 中的错误订阅传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19271651/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com