我正在使用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中发挥作用?
答案 0 :(得分:0)
问题几乎肯定是os_user
不同。
当您在预览模式下本地运行时,运行Visual Studio的帐户几乎肯定是您自己的个人帐户。因此,数据库看到的os_user
是您的个人操作系统用户。当您部署到SSRS服务器时,运行SSRS的操作系统帐户几乎肯定是某个服务帐户。因此,数据库看到的os_user
是服务帐户。
我怀疑在将报告部署到SSRS时,您可以使用任何USERENV
上下文变量来限制对某些行的访问。您需要SSRS告诉数据库最终用户是谁。最有可能的是,您可以通过查看报告中的User!UserID
属性来执行此操作,假设您已将SSRS配置为使用Windows身份验证。由于除了用户名之外还返回域,您可能需要修改查找表以包含要匹配的域。