授與維度數據的自定義存取權(Analysis Services)
適用於: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium
啟用 Cube 的讀取權限之後,您可以設定明確允許或拒絕維度成員存取的其他許可權(包括包含 Cube 所用所有量值的量值維度中包含的量值)。 例如,假設轉銷商有多個類別,您可能會想要設定許可權來排除特定商務類型的數據。 下圖是拒絕存取 Reseller 維度中倉儲業務類型的前後效果。
根據預設,如果您可以從 SQL Server Analysis Services Cube 讀取數據,則會自動擁有與該 Cube 相關聯的所有量值和維度成員的讀取許可權。 雖然此行為可能足以用於許多案例,但有時候安全性需求會針對相同維度上的不同使用者要求更區隔的授權策略,且存取層級不同。
您可以選擇允許 (AllowedSet) 或拒絕 (DeniedSet) 存取的成員來限制存取。 您可以選取或取消選取要包含或排除角色的維度成員來執行此動作。
基本維度安全性是最容易的;您只要選取要包含在角色中的維度屬性和屬性階層即可。 進階安全性更為複雜,而且需要 MDX 腳本的專業知識。 以下將說明這兩種方法。
注意
下列指示假設客戶端聯機會在 MDX 中發出查詢。 如果用戶端在Power BI 中使用DAX,例如Power BI中的Power View,則查詢結果中不會明顯顯示維度安全性。
先決條件
並非所有量值或維度成員都可用於自定義存取案例。 如果角色限制預設量值或成員的存取,或限制對量值表達式一部分的量值存取,連線將會失敗。
檢查維度安全性的障礙:預設量值、預設成員,以及量值表達式中使用的量值
在 SQL Server Management Studio 中,以滑鼠右鍵按兩下 Cube,然後選取 [腳本 Cube | ] 作為 [alter to | [新增查詢編輯器] 視窗。
搜尋 DefaultMeasure。 您應該找到 Cube 的一個,每個檢視方塊各一個。 定義維度安全性時,請避免限制預設量值的存取。
接下來,搜尋 MeasureExpression。 量值表達式是以計算為基礎的量值,其中計算通常包含其他量值。 確認您想要限制的量值未用於表達式中。 或者,繼續限制存取,只要確定也會排除整個 Cube 中該量值的所有參考。
最後,搜尋 DefaultMember。 記下做為屬性之預設成員的任何屬性。 在設定維度安全性時,請避免對這些屬性施加限制。
基本維度安全性
在 SQL Server Management Studio 中,連接到 SQL Server Analysis Services 的實例,展開 [物件總管] 中適當資料庫 角色,然後按兩下資料庫角色(或建立新的資料庫角色)。
角色應該已經有 Cube 的讀取許可權。 如果您需要此步驟的協助,請參閱 授與 Cube 或模型許可權 (Analysis Services)。
在 [維度數據] | [基本] 上,選取您要設定許可權的維度。
選擇屬性階層。 並非所有屬性都可以使用。 只有 AttributeHierarchyEnabled 的屬性才會出現在 屬性階層 列表中。
選擇要允許或拒絕存取的成員。 允許透過 [選取所有成員] 選項,是預設值。 建議您保留此預設值,然後清除 Windows 使用者和組帳戶無法透過此角色在此角色 成員資格 窗格中看見的個別成員。 優點是,未來處理作業中新增的新成員會自動提供給透過此角色連線的人員使用。
或者,您也可以 取消選取所有成員 撤銷整體存取權,然後挑選要允許的成員。 在未來的處理作業中,在您手動編輯維度數據安全性以允許存取這些成員之前,不會顯示新的成員。
或者,按兩下 [進階],為此屬性階層啟用 Visual Totals。 此選項會根據可透過角色取得的成員重新計算匯總。
注意
套用修剪維度成員的許可權時,不會自動重新計算匯總總計。 假設 套用許可權之前,屬性階層的所有 成員都會傳回計數 200。 套用拒絕存取某些成員的許可權之後,[所有 仍然會傳回 200,即使使用者可以看到的成員值也少得多。 若要避免混淆 Cube 的取用者,您可以設定 All 成員只是角色成員的匯總,而不是屬性階層中所有成員的匯總。 若要叫用此行為,您可以在設定維度安全性時,於 [進階] 索引卷標上啟用 Visual Totals。 啟用之後,匯總會在查詢時間計算,而不是從預先計算的匯總擷取。 這可能會對查詢效能產生明顯的影響,因此只有在需要時才使用。
隱藏量值
授與數據格數據的自定義存取權中,已說明完全隱藏量值的所有視覺層面,而不只是其數據格數據,都需要維度成員的許可權。 本節說明如何拒絕存取量值的物件元數據。
在
[維度數據 基本 ] 上,向下捲動 [維度] 列表,直到您到達 Cube 維度,然後選取 [量值維度]。 從量值清單中,清除不應該透過此角色連線到使用者之量值的複選框。
注意
請檢查必要條件,以瞭解如何識別可中斷角色安全性的措施。
進階維度安全性
如果您有 MDX 專業知識,另一種方法是撰寫 MDX 運算式,以設定允許或拒絕存取成員的準則。 按兩下 [建立角色 | 維度數據 | 進階 來提供腳本。
您可以讓 MDX Builder 撰寫 MDX 語句。 如需詳細資訊,請參閱 MDX Builder (Analysis Services - 多維度數據)。 [進階] 索引卷標的 [
屬性
選取您要管理成員安全性的屬性。
允許的成員集
AllowedSet 可以解析為無成員(預設值)、所有成員或某些成員。 如果您允許存取屬性,且未定義允許集合的任何成員,則會授與所有成員的存取權。 如果您允許存取屬性並定義一組特定的屬性成員,則只會顯示明確允許的成員。
當屬性參與多層級階層時,建立 AllowedSet 會產生波紋效果。 例如,假設某個角色允許存取華盛頓州(假設該角色將許可權授與公司的華盛頓州銷售部門)。 對於透過這個角色連線的人,包含祖先(美國)或子系(西雅圖和雷德蒙德)的查詢只會看到包括華盛頓州在內的鏈結的成員。 因為其他狀態並未明確允許,所以效果會與拒絕的效果相同。
注意
如果您定義屬性成員的空白集合({}),則資料庫角色不會看到屬性的成員。 沒有允許的集合不會解譯為空集。
拒絕的成員集
DeniedSet 屬性可以解析為無成員、所有成員(預設值),或某些屬性成員。 當拒絕的集合只包含一組特定的屬性成員時,如果屬性位於多層級階層中,資料庫角色只會拒絕存取這些特定成員,以及子系。 請考慮華盛頓州銷售部門範例。 如果華盛頓被置於 DeniedSet 中,透過此角色連接的人將會看到除了華盛頓及其子代屬性以外的所有其他州。
回想上一節,拒絕的集合是固定集合。 如果後續處理引進了也應該拒絕存取的新成員,您必須編輯此角色,將這些成員新增至清單。
預設成員
當查詢中未明確包含屬性時,DefaultMember 屬性會決定傳回給客戶端的數據集。 如果未明確包含屬性,SQL Server Analysis Services 會針對 屬性使用下列其中一個預設成員:
如果資料庫角色定義屬性的預設成員,SQL Server Analysis Services 會使用此預設成員。
如果資料庫角色未定義屬性的預設成員,SQL Server Analysis Services 會使用為屬性本身定義的預設成員。 除非另有指定,否則屬性的預設成員是 All 成員(除非屬性定義為不可匯總的屬性)。
例如,假設資料庫角色指定 Male 做為 Gender 屬性的預設成員。 除非查詢同時明確包含 Gender 屬性,並指定此屬性的不同成員,否則 SQL Server Analysis Services 會傳回只包含男性客戶的數據集。 如需設定預設成員的詳細資訊,請參閱 定義預設成員。
啟用 Visual Total
VisualTotals 屬性會指出顯示的匯總單元格值是根據所有儲存格值計算,還是只根據資料庫角色可見的儲存格值來計算。
根據預設,VisualTotals 屬性會停用 (設定為 False]。 此預設設定可最大化效能,因為 SQL Server Analysis Services 可以快速計算所有單元格值的總計,而不需要花時間選取要計算的單元格值。
不過,如果使用者可以使用匯總的數據格值來推斷用戶資料庫角色沒有存取權之屬性成員的值,則停用 VisualTotals 屬性可能會建立安全性問題。 例如,SQL Server Analysis Services 會使用三個屬性成員的值來計算匯總的數據格值。 資料庫角色可以存取這三個屬性成員中的兩個。 使用匯總的數據格值,這個資料庫角色的成員將能夠推斷第三個屬性成員的值。
將 VisualTotals 屬性設定為 True 可以消除此風險。 當您啟用 VisualTotals 屬性時,資料庫角色只能檢視角色具有許可權之維度成員的匯總總計。
檢查
按兩下即可測試此頁面上定義的 MDX 語法。
另請參閱
授與 Cube 或模型許可權 (Analysis Services)
授與數據格數據的自定義存取權 (Analysis Services)
授與數據採礦結構和模型的許可權(Analysis Services)
授與數據源對象的許可權 (Analysis Services)