將自訂存取權授與維度資料 (Analysis Services)
啟用 Cube 的讀取存取權之後,即可設定其他權限,明確地允許或拒絕對維度成員的存取 (包括內含 Cube 中所用之所有量值的「量值維度」中所包含的量值)。 例如,當有多個轉售商類別時,您可能會想要設定權限以排除特定業務類型的資料。 下圖示範在拒絕對 Reseller 維度中的 Warehouse 業務類型進行存取之前和之後的效果。
根據預設,若您可以從 Analysis Services Cube 讀取資料,就自動擁有與該 Cube 相關之所有量值與維度成員的讀取權限。 雖然此行為在許多情況下已足夠使用,但有時候安全性需求仍需要更細緻的授權策略,使在相同的維度上不同的使用者能具有不同的存取層級。
您可以透過選擇要允許 (AllowedSet) 或拒絕 (DeniedSet) 存取哪些成員,來限制存取權。 您可以藉由選取或取消選取維度成員,以在角色中包含或排除該成員,來完成此工作。
基本維度安全性是最簡單的;您只要選取要在角色中包含或排除哪些維度屬性和屬性階層即可。 進階安全性比較複雜,且需要以 MDX 指令碼執行。 兩種方式說明如下。
必要條件
並非所有的量值或維度成員,都可用於自訂存取權的情況下。 若角色限制為只能存取預設量值或成員,或是限制為只能存取屬於量值運算式之量值,則連接會失敗。
檢查維度安全性的障礙:預設量值、預設成員以及量值運算式中使用的量值。
在 SQL Server Management Studio 中,於 Cube 上按一下滑鼠右鍵,並選取 [編寫 Cube 的指令碼為]。 | ALTER 至 | 新增查詢編輯器視窗。
搜尋 DefaultMeasure。 您應會發現有一個屬於 Cube,而另一個屬於每個檢視方塊。 定義維度安全性時,請避免限制為無法存取預設量值。
接著,搜尋 MeasureExpression。 量值運算式是以運算為基礎的量值,而計算通常會包含其他量值。 確認運算式中未使用您想要限制的量值。 或者,您可以繼續限制其存取,然後只要確保也排除了整個 Cube 中該量值的所有參考即可。
最後,搜尋 DefaultMember。 記下作為屬性之預設成員的所有屬性。 設定維度安全性時,請避免在這些屬性上加諸限制。
基本維度安全性
在 SQL Server Management Studio 中,連接到 Analysis Services 的執行個體,在 [物件總管] 中展開適當資料庫的 [角色],然後按一下資料庫角色 (或建立新的資料庫角色)。
此角色應該已具有 Cube 的讀取存取權。 若您需要此步驟的說明,請參閱<授與 Cube 或模型權限 (Analysis Services)>。
在 [維度資料] | [基本] 中,選取您要設定權限的維度。
選擇屬性階層。 並非所有屬性都是可用的。 只有具有 [AttributeHierarchyEnabled] 的屬性才會顯示在 [屬性階層] 清單中。
選取要允許或拒絕存取哪些成員。 預設的允許存取是使用 [選取全部成員] 選項。 我們建議您保留此預設,然後再分別清除成員不應顯示於 [成員資格] 窗格中,而使透過此角色連接的 Windows 使用者和群組帳戶看見的成員。 這麼做的好處是,在未來的處理作業中有新成員加入時,會自動提供予透過此角色進行連接的人員。
或者,您可以 [取消選取全部成員] 以全部撤銷存取,然後選取要允許的成員。 在未來的處理作業中,除非您手動編輯維度資料安全性以允許存取新成員,否則不會顯示新成員。
您也可以選擇按一下 [進階],以針對此屬性階層 [啟用視覺化總計]。 此選項會根據可透過此角色看到的成員,重新計算彙總。
[!附註]
套用刪減了維度成員的權限後,不會自動重新計算彙總。 例如,在套用權限之前,屬性階層的全部成員傳回 200 的計數。 在套用拒絕存取部分成員的權限之後,即使向使用者顯示的成員值有所減少,全部也仍會傳回 200。 為了避免您 Cube 的取用者感到混亂,您可以將全部成員設定為只有此角色的這些成員的彙總,而不是屬性階層之所有成員的彙總。 若要叫用此行為,您可以在設定維度安全性時,啟用 [進階] 索引標籤的 Visual Totals。 啟用後,彙總會在查詢時計算,而不是從預先計算的彙總中擷取。 這可能會為查詢效能帶來顯著的影響,因此請在必要時才這麼做。
隱藏量值
在<將自訂存取權授與資料格資料 (Analysis Services)>中,已說明若要完全隱藏量值的顯示,而不僅是隱藏資料格本身的資料時,需要維度成員的權限。 本節說明如何拒絕對量值的物件中繼資料進行存取。
在 [維度資料] | 在 [基本] 中,向下捲動維度清單,直到來到 Cube 維度,然後選取 [量值維度]。
在量值清單中,為不應向透過此角色連接的使用者顯示的量值清除核取方塊。
[!附註]
查看「必要條件」,以了解如何找出可能會破壞角色安全性的量值。
進階維度安全性
若您具有 MDX 專業知識,則另一個方式是撰寫 MDX 運算式,以針對要允許或拒絕存取哪些成員設定準則。 按一下 [建立角色] | 維度資料 | [進階],以提供指令碼。
您可以使用 MDX 產生器撰寫 MDX 陳述式。 如需詳細資訊,請參閱<MDX 產生器對話方塊 (Analysis Services - 多維度資料)>。 [進階] 索引標籤具有下列選項:
屬性
選取您要管理其成員安全性的屬性。允許的成員集
AllowedSet 可以解析成沒有成員 (預設)、全部成員或部分成員。 如果您允許屬性的存取,但未定義允許集合的成員,就會授與所有成員的存取權。 如果您允許存取某屬性,而且有定義一組特定的屬性成員,則只有明確允許的成員會是可見的。當屬性參與了多層級階層時,建立 AllowedSet 會產生漣漪效果。 例如,角色允許對「華盛頓州」的存取 (此情況是假設角色將權限授與公司的華盛頓州銷售部門)。 對於透過此角色進行連接的人而言,若查詢包含上階 (美國) 或下階 (西雅圖及雷德蒙德),則只會看見具有華盛頓州的鏈結中的成員。 因為沒有明確允許其他的州,所以會產生和拒絕一樣的效果。
[!附註]
如果您定義空的屬性成員集合 ({}),則資料庫角色就看不到該屬性的任何成員。 沒有允許的集合不會被解釋為空的集合。
拒絕的成員集
DeniedSet 屬性 (Property) 可解析為沒有成員、全部成員 (預設) 或部分屬性 (Attribute) 成員。 當拒絕的集合只包含特定的屬性 (Attribute) 成員集合時,資料庫角色只會拒絕這些特定成員的存取權,以及對其下階的存取權 (若屬性 (attribute) 是在多層級階層中)。 請思考華盛頓州銷售部門的例子。 若華盛頓州是置於 DeniedSet 中,則透過此角色進行連結的人員將會看到華盛頓州及其下階屬性 (Attribute) 以外的所有其他州。請回想之前的章節中,拒絕的集合是固定的集合。 若後續處理時導入新的成員,則新成員也應會是拒絕的存取,您必須編輯此角色以將這些成員加入至清單中。
預設成員
若屬性 (Attribute) 未明確包含在查詢中,則會由 DefaultMember 屬性 (Property) 決定要傳回至用戶端的資料集。 未明確包含屬性時,Analysis Services 會對該屬性使用下列其中一個預設成員:如果資料庫角色有定義屬性的預設成員,Analysis Services 就會使用此預設成員。
如果資料庫角色沒有定義屬性的預設成員,Analysis Services 就會使用該屬性本身定義的預設成員。 除非您另外指定,否則屬性的預設成員就是 All 成員 (除非該屬性定義為非彙總)。
例如,資料庫角色指定 Male 做為 Gender 屬性的預設成員。 除非查詢明確包含 Gender 屬性並為此屬性指定不同成員,否則 Analysis Services 就會傳回只包含男性客戶的資料集。如需有關設定預設成員的詳細資訊,請參閱<定義預設成員>。
啟用視覺化總計
VisualTotals 屬性會指出所顯示彙總資料格的值,是否根據所有資料格值來計算,或是只根據資料庫角色所看見資料格的值來計算。依預設,會停用 VisualTotals 屬性 (設定為 False)。 此預設值會使效能最佳化,因為 Analysis Services 可快速計算所有資料格的值之總計,而不必浪費時間選取要計算之資料格的值。
不過,停用 VisualTotals 屬性會產生安全性問題,因為使用者有可能使用彙總資料格的值來推論該使用者的資料庫角色沒有存取權之屬性成員的值。 例如,Analysis Services 會使用三個屬性成員的值來計算彙總資料格的值。 資料庫角色有檢視這三個屬性成員當中兩個的存取權。 利用彙總資料格的值,此資料庫角色的成員即可推論出第三個屬性成員的值。
將 VisualTotals 屬性設為 True 可排除此風險。 當您啟用 VisualTotals 屬性時,資料庫角色只能檢視該角色具有權限之維度成員的彙總。
Check
按一下以測試此頁面中定義的 MDX 語法。
請參閱
工作
授與資料採礦結構和模型的權限 (Analysis Services)
授與資料來源物件權限 (Analysis Services)