【问题标题】:UserID and Data Driven Subscriptions用户 ID 和数据驱动订阅
【发布时间】:2012-10-10 18:39:39
【问题描述】:

我正在尝试为使用@UserID 过滤结果的报告创建数据驱动订阅(出于安全目的)。我看到的几个类似问题的答案被引用的解决方案是一个断开的链接。

我们希望有一个用户可以在线访问的版本以及通过电子邮件发送的订阅报告。如果没有两个版本的报告(一个有用户 ID,一个没有),有没有办法做到这一点?

【问题讨论】:

    标签: reporting-services subscription userid data-driven


    【解决方案1】:

    我们开发了一种解决方案,允许将同一报告用于实时访问以及数据驱动订阅 (DDS)。它基于 djphatic 提供的链接中的概念

    首先,我们使用添加到报告中的自定义代码返回 @User 值,而不是使用会使 DDS 阻塞的 User!UserID 函数。该代码类似于 Prologika 解决方案,但我在另一个在线资源中找到了它——我很抱歉不记得我在哪里找到它。代码是:

    Public Function GetHashedUser()
    Try
    Return Report.User!UserID
    Catch
    Return " "
    End Try
    End Function
    

    对于我们使用的用户参数默认值:

    =Code.GetHashedUser()
    

    如果报表正在实时运行,则返回 User!UserID。

    数据驱动订阅需要使用订阅查询传递用户和其他参数。由于以这种方式传递的任何参数都将在 URL 中可见,因此我们使用 userID 的散列版本(称为 userkey)。 userkey 对应于我们安全表中的一个值,可以识别用户及其相关权限。我们不加密其他过滤器,因为它们基于用户并用于向下钻取。

    【讨论】:

    • 要将此功能添加到您的报告中:在报告区域外单击鼠标右键,选择“报告属性...”并选择“代码”选项卡。
    【解决方案2】:

    请参阅下面的链接。我自己没有对此进行测试,但我已经看到之前提到过这个解决方案。

    http://prologika.com/CS/blogs/blog/archive/2011/03/28/data-driven-subscriptions-and-row-level-security.aspx

    【讨论】:

    • 非常感谢您提供的链接。这非常有用!我在网上看到了一些使用函数返回用户 ID 的解决方法,但它们不允许报告的实时版本。本文还解决了可能出现的安全漏洞,因此我无需就此发表后续问题。再次感谢——我要去了解有关 SQL Server 加密和 HASHBYTES 的更多信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多