Sql-Server

授予使用者讀取 SSRS 表中數據子集的權限

  • January 17, 2018

我想創建一個 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

然後,我創建了一個名為StoreKeySSRS 的變數,我在其中使用了一個數據集,在該數據集中,我使用 JOIN 選擇了 StoreKey,該數據集使用由提供的查詢和我創建的表Available values from dataset在目前使用者上使用。因此,我只獲得了某些 AD 組可用的 StoreKey。AD Group``sepupic

您可以使用此程式碼獲取目前登錄所屬的所有 Windows 組:

select distinct name
from sys.login_token
where type = 'WINDOWS GROUP';

您可以將所有這些組插入到表變數/臨時表中,然後將其用於與您的表的聯接中,該表映射Win GroupsStoreKeys您進一步與感興趣的表聯接

引用自:https://dba.stackexchange.com/questions/195049