【问题标题】:Visual Studio, SSRS, Oracle sys_context('USERENV', 'OS_USER')Visual Studio, SSRS, Oracle sys_context('USERENV', 'OS_USER')
【发布时间】:2015-05-29 19:21:01
【问题描述】:

我正在使用 Visual Studio 2012、Oracle 11g 和 SSRS 2012。

我开发了一个报告,它检查会话 USERID 以确定他们是否可以根据存储在 Oracle DB 中的表查看报告。

在 Visual Studio 2012 的预览模式下一切正常;但是,当报告部署到 SSRS 2012 时,不会返回数据,如果是美国,这是可以预料的。

SELECT COMP_FLAG, MBR_MMIS_IDNTFR, LAST_NAME, FIRST_NAME, MIDDLE_NAME, ORG_CODE, ORG_NAME, ORG_PHONE, LAST_VERIFIED_DATE, RAC_START,RAC_END, RAC_CODE   
FROM  TPL_CHIP_MV
WHERE (COMP_FLAG <> 'N')
AND (1 =(SELECT COUNT(USER_ID) AS EXPR1
          FROM REPORT_AUTH
          WHERE (USER_ID = CONCAT('HLAN\',UPPER (SYS_CONTEXT'USERENV', 'OS_USER'))))))

为什么这在 Visual Studio 2012 预览模式中可以正常工作,而在 SSRS 2012 中却不能?我该怎么做才能让它在 SSRS 中工作?

【问题讨论】:

  • 我已使用代码格式化按钮为您重新格式化。

标签: visual-studio-2012 reporting-services oracle11g ssrs-2012


【解决方案1】:

问题几乎可以肯定是os_user 是不同的。

当您在本地以预览模式运行时,运行 Visual Studio 的帐户几乎可以肯定是您自己的个人帐户。所以数据库看到的os_user 是你的个人操作系统用户。当您部署到 SSRS 服务器时,运行 SSRS 的操作系统帐户几乎可以肯定是某个服务帐户。所以数据库看到的os_user就是服务账号。

我怀疑当报表部署到 SSRS 时,您是否能够使用任何 USERENV 上下文变量来限制对某些行的访问。您需要 SSRS 来告诉数据库最终用户是谁。很可能,您可以通过查看报告中的 User!UserID 属性来执行此操作,假设您已将 SSRS 配置为使用 Windows 身份验证。由于除了用户名之外还返回域,您可能需要修改查找表以包含要匹配的域。

【讨论】:

    猜你喜欢
    • 2017-09-23
    • 2020-12-15
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2019-02-27
    • 2016-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多