Visual Studio,SSRS,Oracle sys_context('USERENV','OS_USER')

时间:2015-05-29 19:21:02

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

我正在使用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中发挥作用?

1 个答案:

答案 0 :(得分:0)

问题几乎肯定是os_user不同。

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

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