Visual studio 2012 Visual Studio、SSRS、Oracle系统上下文(“USERENV”、“OS\u USER”)

Visual studio 2012 Visual Studio、SSRS、Oracle系统上下文(“USERENV”、“OS\u USER”),visual-studio-2012,reporting-services,oracle11g,ssrs-2012,Visual Studio 2012,Reporting Services,Oracle11g,Ssrs 2012,我正在使用Visual Studio 2012、Oracle 11g和SSRS 2012 我开发了一个报告,用于检查会话用户ID,以确定他们是否可以根据存储在Oracle DB中的表查看报告 Visual Studio 2012在预览模式下一切正常工作;然而,当该报告部署到SSRS 2012时,数据不会返回,如果美国 SELECT COMP_FLAG, MBR_MMIS_IDNTFR, LAST_NAME, FIRST_NAME, MIDDLE_NAME, ORG_CODE, ORG_NAME,

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

我开发了一个报告,用于检查会话用户ID,以确定他们是否可以根据存储在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中工作?

问题几乎可以肯定是操作系统用户不同

当您以预览模式在本地运行时,运行VisualStudio的帐户几乎肯定是您自己的个人帐户。因此,数据库看到的os_用户是您的个人操作系统用户。当您部署到SSRS服务器时,运行SSRS的操作系统帐户几乎肯定是某个服务帐户。因此,数据库看到的os_用户就是服务帐户


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

我已使用“代码格式”按钮为您重新设置了格式。