2012-02-06 103 views
1

我正在爲SSRS 2008報告開發存儲過程,但我想根據運行報告的用戶的角色來限制數據輸出。我該怎麼做呢?我想要做的是檢索Windows用戶名並基於此過濾記錄,但用戶使用「sa」帳戶登錄到服務器。所以現在我想我應該使用AD登錄。如何在T-SQL中實現基於角色的安全性?

我也看到了如何在SSRS中設置安全性,而不是T-SQL sproc,以便用戶可以訪問相應的文件夾。但是,第二種方法聽起來更麻煩,因爲我們有許多不同的報告,並且我希望用戶可以訪問所有報告,但只能訪問數據的不同部分。

通過報告服務器上的SSRS組和文件夾實現安全性,還是通過T-SQL sproc實現安全性更好?

我查看了「(= User.UserID)」解決方案的鏈接,但是在實現時遇到了問題。我做了什麼:我創建了SSRS的數據集選擇的文本查詢:

select people_id from people_rv where last_name like 'd%' 

這返回的people_id的

一個名單,然後,我創建了一個新的參數,將其設置爲可用上述數據集值。我使它成爲文本數據類型並允許空值和空值。沒有默認值。最後,我設置可見的表矩陣:

=iif(Parameters!staff_id.Value in (select people_id from users),1,0) 

但是,這會產生錯誤。我怎樣才能重新表達這個tablix表達?

+1

作爲參考:在NO條件應SA密碼是分佈式的或由應用程序使用。這是由於一個原因:由數據庫管理員訪問。即使這樣,我會勸說不要以任何理由使用它。 SA是一個衆所周知的用戶名,是基於字典攻擊的常見目標。在應用程序中進一步使用它表示相關應用程序對數據庫服務器本身具有絕對的全面控制權:這是不好的。 – NotMe 2012-02-06 21:07:54

回答

1

不管用於訪問數據源的方法如何,仍可以檢索訪問報告的用戶標識(=User.UserID)。將其設置爲SSRS中的內部參數,然後您可以非常輕鬆地將安全性融入您的查詢中。

查看this question提交的答案後幾分鐘你的。


實現使用出價和SSRS 2008R2的更多具體細節(2008年應該是相同的)

  1. 創建一個參數,讓我們稱之爲 「用戶名」。類型應爲文本和參數的知名度應該是「內部」
  2. 此參數的默認值應設置爲指定的值,並添加值:=User.UserID
  3. 作爲一個臨時的輔助調試,參數拖動到您的設計表面創建一個帶有UserID值的文本框。 (如果您想確認,請預覽報告並確認已設置爲用戶ID。)
  4. 爲您的下一個參數創建數據集:創建一個僅列出此用戶的可用值的數據集。查詢可能是這樣的:

    SELECT 
        CategoryName, 
        CategoryID 
    FROM 
        Categories c 
    INNER JOIN 
        CategoryPermissions cp 
    ON c.ID = cp.CategoryID 
    INNER JOIN 
        Users u 
    ON cp.UserID = u.People_ID 
    WHERE u.WindowsAccount = @UserID 
    
  5. 設置一個參數,您將顯示給用戶。它應該從上一步中的查詢中獲得available values

  6. 設置您的主數據集。它應該同時使用步驟5中的參數值和步驟4中的權限查詢。類似:

    SELECT 
        * 
    FROM 
        Products p 
    INNER JOIN 
        Categories c 
    ON p.CategoryID = c.ID 
    INNER JOIN 
        CategoryPermissions cp 
    ON c.ID = cp.CategoryID 
    INNER JOIN 
        Users u 
    ON cp.UserID = u.People_ID 
    WHERE u.WindowsAccount = @UserID 
    AND c.CategoryName in (@Categories) 
    

    (這種雙重檢查用戶具有看到該類別的權限。)

+0

嗨傑米,你能看看我上面修改過的描述嗎? – salvationishere 2012-02-06 20:56:31

+0

非常感謝傑米。我正在測試你的解決方案。 – salvationishere 2012-02-06 22:06:36

+0

我很興奮!這是解決方案!傑米,非常感謝! – salvationishere 2012-02-06 22:17:18