【问题标题】:SSRS - Checking the UserID before allowing execution of reportSSRS - 在允许执行报告之前检查用户 ID
【发布时间】:2019-05-25 21:29:41
【问题描述】:

我在我的数据集中的 SQL 顶部使用此代码生成 SSRS 报告:

IF OBJECT_ID('tempdb..#ValidUsers') IS NOT NULL DROP TABLE #ValidUsers
CREATE TABLE #ValidUsers
(
    ValidUsers          Varchar(100),
)

Insert Into #ValidUsers SELECT 'ABC\UserA'
Insert Into #ValidUsers SELECT 'ABC\UserB'
Insert Into #ValidUsers SELECT 'ABC\UserC'

然后,我有这段代码,它在运行时将当前 UserID 拉入变量 @CurrentUser 并检查 @CurrentUser 是否在我的#ValidUsers 临时表中:

IF EXISTS (SELECT * FROM #ValidUsers WHERE ValidUsers = @CurrentUser)
Begin
... run SQL to retrieve data ...
Else
... don't retrieve the data ...
End

这工作得很好,只有我专门插入 #ValidUsers 的用户才能运行报告。

这是可以接受的 - 还是限制谁可以运行 SSRS 报告的一种不好/不安全的方式?

如果不好,推荐的限制谁可以运行报告的方法是什么?

【问题讨论】:

  • 只有您可以确定它是否坏 - 它是否满足您的要求?我唯一的问题是为什么不使用内置的安全设置?
  • 同意,Reporting Services 具有内置的安全性,可以确定谁能够查看/运行报表/文件夹。使用 SQL 作为辅助检查没有害处,但我不明白这一点。
  • 它确实完成了我的要求 ["这工作得很好......"]。您能否给我一个指针,指出我应该搜索有关内置安全设置的内容?我没有使用过这些,也不知道在哪里/如何设置它们。

标签: reporting-services


【解决方案1】:

您可以在报告中创建一个user dataset,然后在报告中通过where name=@CurrentUser(将@CurrentUser 的默认值设置为User!UserID)对其进行过滤。当前用户在user dataset时,报告会显示,如果不在,报告会显示空白。

详情可参考this post

【讨论】:

  • 我已经通过创建#ValidUsers 临时表在我的数据集中执行此操作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多