2012-10-30 68 views
0

我有一個數據庫內有許多客戶。表中的每一行都有一個客戶ID,表示數據屬於哪個客戶。與SSRS和共享客戶數據庫的特別報告

是否有可能讓最終用戶使用Ad-Hoc報告生成報告,但只讓他們看到與其客戶ID關聯的數據?

回答

1

在報告中,您可以使用內置字段UserID返回當前用戶的域名,例如MYDOMAIN \用戶名。

如果你可以創建一個表映射客戶ID域名解析加入這個以您的主數據表,那麼你可以添加一個WHERE子句到您的數據集查詢,如

WHERE MappingTable.DomainUsername = @CurrentUser 

在報告中,創建一個隱藏參數稱爲CurrentUser並將該值設置爲Globals!UserID.Value

您需要在報表數據源中使用Windows身份驗證,其中報表用戶憑據將傳遞到數據源,以便此解決方案能夠正常工作。


編輯:我看到我誤解你原來的問題,這實際上是問如果有可能,允許用戶同時限制他們對數據的視圖創建即席報表。這種情況排除了任何在報告中實施的解決方案,因爲用戶將設計自己的報告。相反,您可能需要在源數據庫中實現某種形式的安全層,例如使用Views。如果您的用戶使用域登錄,則可以使用類似的方法。例如,您的視圖可能包含對SUSER_NAME()的引用,以限制該特定用戶的數據。

+0

如果數據是「客戶」而不是域的一部分,則可以使用相同的概念。只需使報告參數提示/請求報告用戶輸入他們的CustomerId來過濾,並在查詢的WHERE子句中包含參數,如上所述。 –

+1

同意上述規定,但請注意,這種方法容易受到客戶輸入不屬於他們自己(無論是意外還是故意)的ID以及訪問他們不應該看到的數據的影響。 – Nathan

+0

好點。如果客戶在域外,他們在獲得報告之前很可能需要某種方式進行認證,則可以使用任何機制來過濾結果,例如,如果使用表單身份驗證並將會話狀態存儲在表中,則通常會有一個與其關聯的用戶標識,在這種情況下,可以在INNER JOIN中使用此用戶標識來防止除了當前會話的用戶。 –