授予使用者讀取 SSRS 表中數據子集的權限
我想創建一個 SSRS 報告,它利用我們的數據倉庫 DW 中的數據。例如,這個 DW 將 100 家左右的商店的銷售額匯總到一張 FactStoreSale 表中。
=User!UserID
在報告中,通過將表達式用作參數中的預設值,我設法查看了啟動報告的 AD 使用者。每個 AD 使用者都包含在一個 AD 安全組中。該組通常包括經理
Domain\first.lastname
和員工的共享帳戶Domain\Store1000User
。安全組的名稱通常是GRP_1000
(對於 StoreKey 1000)。是否可以允許安全組中的使用者僅查看與該 StoreKey 對應的數據,即如果安全組中包含的某些使用者
GRP_1000
使用報告,則結果集將是:Select Sales, Quantity FROM FactStoreSale WHERE StoreKey = 1000
注意:我不希望為每個商店創建一個報告,因為這需要 100 個報告。有些管理員可以管理多個商店,因此他們可能包含在多個安全組中,需要相應的權限。
我不想拆分基礎表
FactStoreSale
,即使應該可以將其拆分為 100 個左右的模式,並相應地授予安全組成員訪問這些模式的權限。我想到的一個解決方案是使用 SSIS 創建一個表,該表每天都會更新,外觀如下:
SecurityGroup StoreKey GRP_1000 1000 GRP_1001 1001 GRP_1002x 1002
然後使用此表來減少使用者可以從中查看數據的商店數量。
我不知道如何在 SSRS 中使用安全組,因為我只
UserID
在 SSRS 的內置欄位中找到,但對它們各自的安全組一無所知。我也不確定這是否是最佳方式,因為它需要額外的表並手動更新表(因為我不希望自動執行此過程以對此進行更高的控制)。
編輯
我找到了一種獲取權限路徑的方法,即屬於使用 SQL 伺服器和查詢的使用者的組:
EXEC xp_logininfo 'Domain\User.Name', 'all'
@User_id
我已經在 SSRS 中進行了測試,我可以用我的變數替換 ‘Domain\User.Name’ 。我已經測試過用這個查詢創建一個數據集。這似乎提供了正確的數據,但它缺少的是我認為可能的 StoreKey 列Cast(RIGHT(Permission_path,4) as int)
。我希望能夠
@StoreKey
在 SSRS 中呼叫一個變數,其中來自查詢的可用值類似於:Select Cast(RIGHT(Permission_path,4) as int) FROM EXEC xp_logininfo @User_id, 'all'
,但我自然不能在 FROM 子句中進行 EXEC。我還嘗試在 SSRS 中創建一個新的數據集,該數據集將使用同一項目中另一個數據集的數據,但這也不起作用(我在 Google 上搜尋它是不可能的)。
編輯:最終解決方案
我為實現這一點所做的是創建一個外觀表:
ADGroup StoreKey Group_HQ 1010 Group_HQ 1011 Group_HQ 1012 Group_HQ 1000 Group_1010 1010 Group_1011 1011
然後,我創建了一個名為
StoreKey
SSRS 的變數,我在其中使用了一個數據集,在該數據集中,我使用 JOIN 選擇了 StoreKey,該數據集使用由提供的查詢和我創建的表Available values from dataset
在目前使用者上使用。因此,我只獲得了某些 AD 組可用的 StoreKey。AD Group``sepupic
您可以使用此程式碼獲取目前登錄所屬的所有 Windows 組:
select distinct name from sys.login_token where type = 'WINDOWS GROUP';
您可以將所有這些組插入到表變數/臨時表中,然後將其用於與您的表的聯接中,該表映射
Win Groups
到StoreKeys
您進一步與感興趣的表聯接