授與對維度資料的自訂存取權
在 MicrosoftSQL Server 2005 Analysis Services (SSAS) 資料庫角色對 Cube 中的維度具有讀取或讀取/寫入權限之後,您就可以對每一個維度屬性成員定義安全性 (也稱為維度安全性)。依預設,在資料庫角色具有讀取權限的 Cube 中,該角色有權存取所有維度屬性的所有成員。您可以為每個維度屬性定義特定的屬性成員集合,來針對具有特定存取權限的角色成員 (AllowedSet) 或針對被明確拒絕存取權限的角色成員 (DeniedSet)。您也可以為每個屬性階層定義預設成員。依預設,[全部] 成員是預設成員。如果您拒絕某些屬性成員的讀取權限,最好讓 [全部] 成員的值等於角色成員中具有存取權之成員的彙總,而不是屬性階層所有成員的彙總。若要指定這種行為,請啟用 VisualTotals。當您啟用 VisualTotals 後,彙總會在查詢時計算,而不是從預先計算的彙總中擷取。
[!附註]
維度角色成員具有的存取類型,是以授與的維度存取權為基礎,亦即讀取或讀取/寫入。
了解 IsAllowed 屬性
IsAllowed 屬性 (Property) 會決定資料庫角色是否可存取屬性 (Attribute) 成員。依預設,對維度具有存取權的資料庫角色,無法存取屬性階層。
了解 AllowedSet 屬性
AllowedSet 屬性會使用多維度運算式 (MDX) 運算式,來決定資料庫角色可檢視的屬性成員 (允許的集合)。允許的集合可以不包含 (預設值)、包含全部或部分屬性成員。如果您允許屬性的存取,但未定義允許集合的成員,就會授與所有成員的存取權。如果您允許屬性的存取,而且有定義一組特定的屬性成員,則只有特定允許的成員會是可見的。特別定義允許的集合,可能會限制在定義允許的集合之後才加入之屬性成員的可見性。
限制一個屬性的允許集合,會影響其他屬性的可見性。例如,假設 Customer 屬性的允許集合只包括一些屬性成員,但 City 屬性的允許集合包含所有屬性成員。在此案例中,可見的 City 屬性只會包含在 Customer 屬性的允許集合中之客戶的城市。如果有一個城市沒有客戶,就看不到該城市的屬性成員。換句話說,唯有當屬性成員與允許的集合中至少一個成員一同存在時,才能看見該屬性成員。
[!附註]
如果您定義空的屬性成員集合,則資料庫角色就看不到該屬性的任何成員。沒有允許的集合不會被解釋為空的集合。
了解 DeniedSet 屬性
DeniedSet 屬性會使用 MDX 運算式,來決定明確拒絕資料庫角色存取的屬性成員 (拒絕的集合)。拒絕的集合可以不包含、包含全部 (預設值) 或部分屬性成員。依預設,不會定義拒絕的集合。
當拒絕的集合只包含一組特定的屬性成員時,就只會拒絕資料庫角色存取該些特定成員。特別定義拒絕的集合,會影響在定義拒絕的集合之後才加入之屬性成員的可存取性。
在拒絕的集合中定義一組特定的屬性時,此拒絕的集合對其他屬性之可存取性的影響,要看是否有啟用 ApplyDenied 屬性而定。例如,假設 State 屬性有一個拒絕的集合,而且已啟用 ApplyDenied 屬性。在此案例中,資料庫角色將無法存取拒絕的集合內之州別的任何 Customer 屬性。
了解 ApplyDenied 屬性
ApplyDenied 屬性會指出是否使用拒絕的集合之成員,來判斷資料庫角色是否可看見屬性階層的成員。依預設,每一個屬性階層的 ApplyDenied 屬性都會設定為 True (已啟用)。
[!附註]
拒絕的集合之影響範圍會視 ApplyDenied 屬性而定;允許的集合則不一樣,一定會用來判斷資料庫角色是否看得到屬性階層的成員。
當 ApplyDenied 屬性已啟用,而且有拒絕的集合時,如果屬性階層有包含拒絕的集合中之任何成員,資料庫角色將無法存取該屬性階層的任何成員。例如,ApplyDenied 屬性已啟用,且拒絕的集合是由 State 屬性中的州別組成。除了無法存取 State 屬性之外,資料庫角色也無法存取拒絕的集合內任何一州的 Customers 屬性。
當 ApplyDenied 屬性已停用,而且有拒絕的集合時,如果屬性階層有包含拒絕的集合中之任何成員,資料庫角色將可存取該屬性階層的任何成員。例如,ApplyDenied 屬性已停用,且拒絕的集合是由 State 屬性中的州別組成。雖然資料庫角色無法存取 State 屬性,該資料庫角色仍可存取拒絕的集合內之任何一州的 Customers 屬性。
了解 VisualTotals 屬性
VisualTotals 屬性會指出所顯示彙總資料格的值,是否根據所有資料格值來計算,或是只根據資料庫角色所看見資料格的值來計算。
依預設,會停用 VisualTotals 屬性 (設定為 False)。此預設值會使效能最佳化,因為 Analysis Services 可快速計算所有資料格的值之總計,而不必浪費時間選取要計算之資料格的值。
不過,停用 VisualTotals 屬性會產生安全性問題,因為使用者有可能使用彙總資料格的值來推論該使用者的資料庫角色沒有存取權之屬性成員的值。例如,Analysis Services 會使用三個屬性成員的值來計算彙總資料格的值。資料庫角色有檢視這三個屬性成員當中兩個的存取權。利用彙總資料格的值,此資料庫角色的成員即可推論出第三個屬性成員的值。
如果使用者可推論出使用者的資料庫角色沒有存取權之屬性成員的值,安全性最佳作法會指示您啟用 (設定為 True) 該屬性的 VisualTotals 屬性。當您啟用 VisualTotals 屬性時,資料庫角色只能檢視該角色具有權限之維度成員的彙總。例如,啟用 VisualTotals 屬性表示資料庫角色看到的彙總,只會包含該角色可見的州別 (亦即,State 屬性的成員)。彙總不會包含所有州別的值。
了解 DefaultMember 屬性
若屬性 (Attribute) 未明確包含在查詢中,則會由 DefaultMember 屬性 (Property) 決定要傳回至用戶端的資料集。未明確包含屬性時,Analysis Services 會對該屬性使用下列其中一個預設成員:
如果資料庫角色有定義屬性的預設成員,Analysis Services 就會使用此預設成員。
如果資料庫角色沒有定義屬性的預設成員,Analysis Services 就會使用該屬性本身定義的預設成員。除非您另外指定,否則屬性的預設成員就是 All 成員 (除非該屬性定義為非彙總)。
例如,資料庫角色指定 Male 做為 Gender 屬性的預設成員。除非查詢明確包含 Gender 屬性並為此屬性指定不同成員,否則 Analysis Services 就會傳回只包含男性客戶的資料集。如需有關設定預設成員的詳細資訊,請參閱<定義預設成員>。
對維度的成員設定存取權限
在對維度的成員設定存取權限之前,您可以檢視一些範例,看看不同存取設定如何在查詢成員時影響傳回的結果集。下列主題提供這些範例設定:
了解不同存取權限的運作方式之後,您才可以授與適當的權限。若要授與對維度成員的存取權限,使用者必須是 Analysis Services 伺服器角色的成員,或是具有完整控制權 (管理員) 權限的 Analysis Services 資料庫角色成員。
當您使用 Business Intelligence Development Studio 來授與存取權限給維度的成員時,您必須使用 [維度資料存取] 索引標籤之 [基本] 索引標籤上的標準選項,或使用 [進階] 索引標籤上的其他自訂選項。
重要事項 |
---|
如果 Microsoft Windows 使用者或群組屬於多個資料庫角色,該使用者或群組的有效權限會透過所有資料庫角色而加總 (權限的聯集)。如果有一個資料庫角色拒絕使用者存取屬性成員,但另一個資料庫角色授與該使用者對該屬性成員的存取權,則使用者將具有該屬性成員的存取權。 |
若要使用 [基本] 索引標籤來提供資料庫角色對維度成員的存取權
在 SQL Server Management Studio 中,連接到 Analysis Services 的執行個體,在 [物件總管] 中展開適當資料庫的 [角色],然後按一下資料庫角色 (或建立新的資料庫角色)。
按一下 [選取頁面] 窗格中的 [維度自訂資料存取],從 [維度] 清單中選取維度,然後在 [進階] 索引標籤上選取 [允許屬性]。
選取這個選項會將 IsAllowed 屬性設定為 True。
在 [屬性] 清單中,選取您要為其指定成員的屬性,這些成員應由資料庫角色檢視。
若要明確拒絕對特定屬性成員的存取,請在 [拒絕的成員集] 方塊中,輸入這些屬性成員的 MDX 運算式。其他所有屬性成員都會看得到。
- 若要明確地只授與特定成員的存取權,請在 [允許的成員集] 方塊中,輸入這些屬性成員的 MDX 運算式。其他屬性成員都將看不到。
若要使用 [進階] 索引標籤來提供資料庫角色對維度成員的存取權
在 SQL Server Management Studio 中,連接到 Analysis Services 的執行個體,在 [物件總管] 中展開適當資料庫的 [角色],然後按一下資料庫角色 (或建立新的資料庫角色)。
按一下 [選取頁面] 窗格中的 [維度自訂資料存取],從 [維度] 清單中選取維度,然後在 [進階] 索引標籤上選取 [允許屬性]。
選取這個選項會將 IsAllowed 屬性設定為 True。
在 [屬性] 清單中,選取您要為其指定成員的屬性,這些成員應由資料庫角色檢視。
若要明確拒絕對特定屬性成員的存取,請在 [拒絕的成員集] 方塊中,輸入這些屬性成員的 MDX 運算式。其他所有屬性成員都會看得到。
若要明確地只授與特定成員的存取權,請在 [允許的成員集] 方塊中,輸入這些屬性成員的 MDX 運算式。其他屬性成員都將看不到。