【问题标题】:RLS in SSRS 2017SSRS 2017 中的 RLS
【发布时间】:2020-10-25 14:25:02
【问题描述】:

我有一个包含 CreatedBy 列的 SSRS 报告,我需要使用此列来启用行级安全性。要求如下。

Manager CreatedBY 
A       user1
A       user2
B       user3
B       user4
B       user5

所以当经理 A 登录时,他应该看到 user1 和 user2 创建的所有记录,所以经理 B 可以看到 user3、user4 和 user5 创建的所有记录。

以下查询是否足以实现相同或需要调整任何内容?

select * from table
where createdby IN '@UserID'

@UserID - 我将在 SSRS 中创建此参数。

感谢您的支持。

问候, 维雷什

【问题讨论】:

    标签: sql sql-server reporting-services


    【解决方案1】:

    使用=:

    select *
    from table
    where createdby = @UserID;
    

    如果您将值作为参数传递,则不需要在值周围加上单引号。

    【讨论】:

      【解决方案2】:

      这取决于@UserID 参数将包含什么。是经理的 ID 还是 UserID 的列表?

      如果它包含 ManagerID(例如 A),那么您可以这样做

      SELECT * FROM table
      WHERE Manager = @UserID
      

      如果@UserID 是从报告中传入的值列表(多值报告参数),那么您可以执行类似的操作

      SELECT * FROM table
      WHERE CreatedBY IN (@UserID)
      

      如果您使用第二种方法,请注意,这仅在数据集查询只是 SQL 语句或脚本时才有效,如果您直接在数据集查询中调用存储过程,它将不起作用(无需额外工作) . SSRS 将获取值列表并注入它们,因此如果您传入 User1User2 的列表,则传递给 SQL Server 的最终查询实际上是

      SELECT * FROM table
      WHERE CreatedBY IN('User1', 'User2')
      

      【讨论】:

      • 嗨,在我的情况下,记录将由用户创建,我不想将访问权限授予这些用户。我需要允许他们各自的经理查看他们报告的所有用户创建的数据。假设有 5 个用户,前 3 个用户向 manager1 报告,接下来的 2 个用户向 manager2 报告。当 manager1 访问报表时,他应该看到 3 个用户创建的所有记录,manager2 可以看到其他 2 个用户创建的记录。感谢您的建议
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多