1

我使用Visual Studio 2012中,Oracle 11g和SSRS 2012Visual Studio中,SSRS,甲骨文SYS_CONTEXT( 'USERENV', 'OS_USER')

我已經開發了檢查會話USERID以確定他們的報告可以查看存儲在Oracle數據庫中的表是否存在該報告。

一切正常的預覽模式的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就是服務帳號。

我懷疑你可以使用任何USERENV上下文變量來限制對報表部署到SSRS時訪問某些行。你需要SSRS來告訴數據庫誰是最終用戶。很可能,您可以通過查看報告中的User!UserID屬性來執行此操作,前提是您已將SSRS配置爲使用Windows身份驗證。由於除用戶名外還返回域,因此可能需要修改查找表以包含要匹配的域。