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